Browse Source

HUE-8298 [kafka] Move to an official lib

Romain Rigaux 7 years ago
parent
commit
0d30037a1c
30 changed files with 2645 additions and 142 deletions
  1. 2 1
      desktop/Makefile
  2. 18 1
      desktop/conf.dist/hue.ini
  3. 18 1
      desktop/conf/pseudo-distributed.ini.tmpl
  4. 1 1
      desktop/core/src/desktop/models.py
  5. 1 1
      desktop/libs/indexer/src/indexer/api3.py
  6. 7 7
      desktop/libs/indexer/src/indexer/templates/importer.mako
  7. 4 4
      desktop/libs/indexer/src/indexer/templates/topics.mako
  8. 36 0
      desktop/libs/kafka/Makefile
  9. 1 0
      desktop/libs/kafka/babel.cfg
  10. 1 0
      desktop/libs/kafka/hueversion.py
  11. 31 0
      desktop/libs/kafka/setup.py
  12. 15 0
      desktop/libs/kafka/src/kafka/__init__.py
  13. 50 0
      desktop/libs/kafka/src/kafka/conf.py
  14. 5 10
      desktop/libs/kafka/src/kafka/kafka_api.py
  15. 1 1
      desktop/libs/kafka/src/kafka/kafka_client.py
  16. 250 0
      desktop/libs/kafka/src/kafka/locale/de/LC_MESSAGES/django.po
  17. 218 0
      desktop/libs/kafka/src/kafka/locale/en/LC_MESSAGES/django.po
  18. 41 0
      desktop/libs/kafka/src/kafka/locale/en_US.pot
  19. 250 0
      desktop/libs/kafka/src/kafka/locale/es/LC_MESSAGES/django.po
  20. 250 0
      desktop/libs/kafka/src/kafka/locale/fr/LC_MESSAGES/django.po
  21. 244 0
      desktop/libs/kafka/src/kafka/locale/ja/LC_MESSAGES/django.po
  22. 246 0
      desktop/libs/kafka/src/kafka/locale/ko/LC_MESSAGES/django.po
  23. 329 0
      desktop/libs/kafka/src/kafka/locale/pt/LC_MESSAGES/django.po
  24. 326 0
      desktop/libs/kafka/src/kafka/locale/pt_BR/LC_MESSAGES/django.po
  25. 246 0
      desktop/libs/kafka/src/kafka/locale/zh_CN/LC_MESSAGES/django.po
  26. 22 0
      desktop/libs/kafka/src/kafka/settings.py
  27. 24 0
      desktop/libs/kafka/src/kafka/urls.py
  28. 2 104
      desktop/libs/metadata/src/metadata/conf.py
  29. 6 5
      desktop/libs/metadata/src/metadata/manager_client.py
  30. 0 6
      desktop/libs/metadata/src/metadata/urls.py

+ 2 - 1
desktop/Makefile

@@ -54,7 +54,8 @@ APPS := core \
 	libs/libzookeeper \
 	libs/libzookeeper \
 	libs/metadata \
 	libs/metadata \
 	libs/notebook \
 	libs/notebook \
-	libs/dashboard
+	libs/dashboard \
+        libs/kafka
 
 
 .PHONY: default
 .PHONY: default
 default:: hue syncdb
 default:: hue syncdb

+ 18 - 1
desktop/conf.dist/hue.ini

@@ -1304,9 +1304,12 @@
   # Flag to turn on the new metadata importer.
   # Flag to turn on the new metadata importer.
   ## enable_new_importer=false
   ## enable_new_importer=false
 
 
-  # Flag to turn on sqoop.
+  # Flag to turn on Sqoop ingest.
   ## enable_sqoop=false
   ## enable_sqoop=false
 
 
+  # Flag to turn on Kafka topic ingest.
+  ## enable_kafka=false
+
 
 
 ###########################################################################
 ###########################################################################
 # Settings to configure Job Designer
 # Settings to configure Job Designer
@@ -1714,6 +1717,20 @@
   ## whitelisted_domains_google=
   ## whitelisted_domains_google=
 
 
 
 
+###########################################################################
+# Settings to configure Kafka
+###########################################################################
+
+[kafka]
+
+  [[kafka]]
+    # Enable the Kafka integration.
+    ## is_enabled=false
+
+    # Base URL of Kafka REST API.
+    ## api_url=http://localhost:8082
+
+
 ###########################################################################
 ###########################################################################
 # Settings to configure Metadata
 # Settings to configure Metadata
 ###########################################################################
 ###########################################################################

+ 18 - 1
desktop/conf/pseudo-distributed.ini.tmpl

@@ -1306,9 +1306,12 @@
   # Flag to turn on the new metadata importer.
   # Flag to turn on the new metadata importer.
   ## enable_new_importer=false
   ## enable_new_importer=false
 
 
-  # Flag to turn on sqoop.
+  # Flag to turn on Sqoop ingest.
   ## enable_sqoop=false
   ## enable_sqoop=false
 
 
+  # Flag to turn on Kafka topic ingest.
+  ## enable_kafka=false
+
 
 
 ###########################################################################
 ###########################################################################
 # Settings to configure Job Designer
 # Settings to configure Job Designer
@@ -1718,6 +1721,20 @@
   ## whitelisted_domains_google=
   ## whitelisted_domains_google=
 
 
 
 
+###########################################################################
+# Settings to configure Kafka
+###########################################################################
+
+[kafka]
+
+  [[kafka]]
+    # Enable the Kafka integration.
+    ## is_enabled=false
+
+    # Base URL of Kafka REST API.
+    ## api_url=http://localhost:8082
+
+
 ###########################################################################
 ###########################################################################
 # Settings to configure Metadata
 # Settings to configure Metadata
 ###########################################################################
 ###########################################################################

+ 1 - 1
desktop/core/src/desktop/models.py

@@ -44,7 +44,7 @@ from settings import HUE_DESKTOP_VERSION
 from aws.conf import is_enabled as is_s3_enabled, has_s3_access
 from aws.conf import is_enabled as is_s3_enabled, has_s3_access
 from azure.conf import is_adls_enabled, has_adls_access
 from azure.conf import is_adls_enabled, has_adls_access
 from dashboard.conf import get_engines, HAS_REPORT_ENABLED
 from dashboard.conf import get_engines, HAS_REPORT_ENABLED
-from metadata.conf import has_kafka
+from kafka.conf import has_kafka
 from notebook.conf import SHOW_NOTEBOOKS, get_ordered_interpreters
 from notebook.conf import SHOW_NOTEBOOKS, get_ordered_interpreters
 
 
 from desktop import appmanager
 from desktop import appmanager

+ 1 - 1
desktop/libs/indexer/src/indexer/api3.py

@@ -30,6 +30,7 @@ from desktop.lib.django_util import JsonResponse
 from desktop.lib.exceptions_renderable import PopupException
 from desktop.lib.exceptions_renderable import PopupException
 from desktop.lib.i18n import smart_unicode
 from desktop.lib.i18n import smart_unicode
 from desktop.models import Document2
 from desktop.models import Document2
+from kafka.kafka_api import get_topics
 from librdbms.server import dbms as rdbms
 from librdbms.server import dbms as rdbms
 from libsentry.conf import is_enabled
 from libsentry.conf import is_enabled
 from metadata.manager_client import ManagerApi
 from metadata.manager_client import ManagerApi
@@ -45,7 +46,6 @@ from indexer.indexers.morphline import MorphlineIndexer
 from indexer.indexers.rdbms import RdbmsIndexer, run_sqoop
 from indexer.indexers.rdbms import RdbmsIndexer, run_sqoop
 from indexer.indexers.sql import SQLIndexer
 from indexer.indexers.sql import SQLIndexer
 from indexer.solr_client import SolrClient, MAX_UPLOAD_SIZE
 from indexer.solr_client import SolrClient, MAX_UPLOAD_SIZE
-from metadata.kafka_api import get_topics
 
 
 
 
 LOG = logging.getLogger(__name__)
 LOG = logging.getLogger(__name__)

+ 7 - 7
desktop/libs/indexer/src/indexer/templates/importer.mako

@@ -344,7 +344,7 @@ ${ assist.assistPanel() }
                 <label class="control-label"><div>${ _('Topics') }</div>
                 <label class="control-label"><div>${ _('Topics') }</div>
                   <select class="input-xxlarge" data-bind="options: createWizard.source.kafkaTopics,
                   <select class="input-xxlarge" data-bind="options: createWizard.source.kafkaTopics,
                          value: createWizard.source.kafkaSelectedTopics,
                          value: createWizard.source.kafkaSelectedTopics,
-                         optionsCaption: 'Choose...'"
+                         optionsCaption: '${ _("Choose...") }'"
                          placeholder="${ _('The list of topics to consume, e.g. orders,returns') }"></select>
                          placeholder="${ _('The list of topics to consume, e.g. orders,returns') }"></select>
                   ## <select data-bind="selectize: createWizard.source.kafkaTopics, value: createWizard.source.kafkaSelectedTopics" placeholder="${ _('The list of topics to consume, e.g. orders,returns') }"></select>
                   ## <select data-bind="selectize: createWizard.source.kafkaTopics, value: createWizard.source.kafkaSelectedTopics" placeholder="${ _('The list of topics to consume, e.g. orders,returns') }"></select>
                 </label>
                 </label>
@@ -414,7 +414,7 @@ ${ assist.assistPanel() }
                 <label class="control-label"><div>${ _('Object') }</div>
                 <label class="control-label"><div>${ _('Object') }</div>
                   <select class="input-xxlarge" data-bind="options: createWizard.source.streamObjects,
                   <select class="input-xxlarge" data-bind="options: createWizard.source.streamObjects,
                          value: createWizard.source.streamObject,
                          value: createWizard.source.streamObject,
-                         optionsCaption: 'Choose...'"
+                         optionsCaption: '${ _("Choose...") }'"
                          placeholder="${ _('The SFDC object to import, e.g. Account, Opportunity') }"></select>
                          placeholder="${ _('The SFDC object to import, e.g. Account, Opportunity') }"></select>
                 </label>
                 </label>
                 <!-- /ko -->
                 <!-- /ko -->
@@ -556,7 +556,7 @@ ${ assist.assistPanel() }
 
 
             <div class="control-group">
             <div class="control-group">
               <label class="control-label"><div>${ _('Extras') }</div>
               <label class="control-label"><div>${ _('Extras') }</div>
-                <a href="javascript:void(0)" data-bind="css: { 'inactive-action': !showProperties() }, click: function() { showProperties(!showProperties()) }" title="${ _('Show extra properties') }">
+                <a href="javascript:void(0)" data-bind="css: { 'inactive-action': !showProperties() }, toggle: showProperties" title="${ _('Show extra properties') }">
                   <i class="fa fa-sliders fa-padding-top"></i>
                   <i class="fa fa-sliders fa-padding-top"></i>
                 </a>
                 </a>
               </label>
               </label>
@@ -721,7 +721,7 @@ ${ assist.assistPanel() }
 
 
             <div class="control-group">
             <div class="control-group">
               <label class="control-label"><div>${ _('Extras') }</div>
               <label class="control-label"><div>${ _('Extras') }</div>
-                <a href="javascript:void(0)" data-bind="css: { 'inactive-action': !showProperties() }, click: function() { showProperties(!showProperties()) }" title="${ _('Show extra properties') }">
+                <a href="javascript:void(0)" data-bind="css: { 'inactive-action': !showProperties() }, toggle: showProperties" title="${ _('Show extra properties') }">
                   <i class="fa fa-sliders fa-padding-top"></i>
                   <i class="fa fa-sliders fa-padding-top"></i>
                 </a>
                 </a>
               </label>
               </label>
@@ -785,7 +785,7 @@ ${ assist.assistPanel() }
 
 
           <div class="control-group">
           <div class="control-group">
             <label class="control-label"><div>${ _('Extras') }</div>
             <label class="control-label"><div>${ _('Extras') }</div>
-              <a href="javascript:void(0)" data-bind="css: { 'inactive-action': !showProperties() }, click: function() { showProperties(!showProperties()) }" title="${ _('Show extra properties') }">
+              <a href="javascript:void(0)" data-bind="css: { 'inactive-action': !showProperties() }, toggle: showProperties" title="${ _('Show extra properties') }">
                 <i class="fa fa-sliders fa-padding-top"></i>
                 <i class="fa fa-sliders fa-padding-top"></i>
               </a>
               </a>
             </label>
             </label>
@@ -1645,7 +1645,7 @@ ${ assist.assistPanel() }
       });
       });
       self.hasStreamSelected.subscribe(function(newValue) {
       self.hasStreamSelected.subscribe(function(newValue) {
         if (newValue) {
         if (newValue) {
-          wizard.guessFormat(); 
+          wizard.guessFormat();
           if (newValue == 'kafka') {
           if (newValue == 'kafka') {
             wizard.destination.tableFormat('kudu');
             wizard.destination.tableFormat('kudu');
           }
           }
@@ -2140,7 +2140,7 @@ ${ assist.assistPanel() }
                 self.source.streamObjects(resp['objects']);
                 self.source.streamObjects(resp['objects']);
               }
               }
             }
             }
-    
+
             if (self.source.inputFormat() != 'stream' || self.source.streamSelection() != 'sfdc') {
             if (self.source.inputFormat() != 'stream' || self.source.streamSelection() != 'sfdc') {
               self.guessFieldTypes();
               self.guessFieldTypes();
             }
             }

+ 4 - 4
desktop/libs/indexer/src/indexer/templates/topics.mako

@@ -747,7 +747,7 @@ ${ assist.assistPanel() }
 
 
       self.fetchIndexes = function (callback) {
       self.fetchIndexes = function (callback) {
         self.isLoading(true);
         self.isLoading(true);
-        $.post("${ url('metadata:list_topics') }", {}, function (data) {
+        $.post("${ url('kafka:list_topics') }", {}, function (data) {
           if (data.status == 0) {
           if (data.status == 0) {
             var indexes = []
             var indexes = []
             data.topics.forEach(function (index) {
             data.topics.forEach(function (index) {
@@ -766,7 +766,7 @@ ${ assist.assistPanel() }
         }).always(function () {
         }).always(function () {
           self.isLoading(false);
           self.isLoading(false);
         });
         });
-        hueAnalytics.log('indexes', 'list_indexes');
+        hueAnalytics.log('kafka', 'list_topics');
       };
       };
 
 
       self.getIndexByName = function (name) {
       self.getIndexByName = function (name) {
@@ -780,7 +780,7 @@ ${ assist.assistPanel() }
       }
       }
 
 
       self.fetchIndex = function (index) {
       self.fetchIndex = function (index) {
-        $.post("${ url('metadata:list_topic') }", {
+        $.post("${ url('kafka:list_topic') }", {
           name: index.name()
           name: index.name()
         }, function (data) {
         }, function (data) {
           if (data.status == 0) {
           if (data.status == 0) {
@@ -795,7 +795,7 @@ ${ assist.assistPanel() }
         }).fail(function (xhr, textStatus, errorThrown) {
         }).fail(function (xhr, textStatus, errorThrown) {
           $(document).trigger("error", xhr.responseText);
           $(document).trigger("error", xhr.responseText);
         });
         });
-        hueAnalytics.log('indexes', 'list_index');
+        hueAnalytics.log('kafka', 'list_topic');
       };
       };
 
 
       self.deleteIndexes = function () {
       self.deleteIndexes = function () {

+ 36 - 0
desktop/libs/kafka/Makefile

@@ -0,0 +1,36 @@
+#
+# Licensed to Cloudera, Inc. under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  Cloudera, Inc. licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+
+ifeq ($(ROOT),)
+  $(error "Error: Expect the environment variable $$ROOT to point to the Desktop installation")
+endif
+
+include $(ROOT)/Makefile.sdk
+
+default::
+	@echo '  env-install    : Install into virtual-env'
+
+#
+# env-install
+#   Install app into the virtual environment.
+#
+.PHONY: env-install
+env-install: compile ext-env-install
+	@echo '--- Installing $(APP_NAME) into virtual-env'
+	@$(ENV_PYTHON) setup.py develop -N -q

+ 1 - 0
desktop/libs/kafka/babel.cfg

@@ -0,0 +1 @@
+[python: src/kafka/**.py]

+ 1 - 0
desktop/libs/kafka/hueversion.py

@@ -0,0 +1 @@
+../../../VERSION

+ 31 - 0
desktop/libs/kafka/setup.py

@@ -0,0 +1,31 @@
+# Licensed to Cloudera, Inc. under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  Cloudera, Inc. licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+from setuptools import setup, find_packages
+from hueversion import VERSION
+
+setup(
+      name = "kafka",
+      version = VERSION,
+      url = 'http://github.com/cloudera/hue',
+      description = "Kafka Libraries",
+      packages = find_packages('src'),
+      package_dir = {'': 'src' },
+      install_requires = ['setuptools', 'desktop'],
+      # Even libraries need to be registered as desktop_apps,
+      # if they have configuration, like this one.
+      entry_points = { 'desktop.sdk.application': 'kafka=kafka' },
+)

+ 15 - 0
desktop/libs/kafka/src/kafka/__init__.py

@@ -0,0 +1,15 @@
+# Licensed to Cloudera, Inc. under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  Cloudera, Inc. licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.

+ 50 - 0
desktop/libs/kafka/src/kafka/conf.py

@@ -0,0 +1,50 @@
+#!/usr/bin/env python
+# Licensed to Cloudera, Inc. under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  Cloudera, Inc. licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import logging
+
+from django.utils.translation import ugettext_lazy as _t
+
+from desktop.lib.conf import Config, ConfigSection, coerce_bool
+
+
+LOG = logging.getLogger(__name__)
+
+
+def has_kafka():
+  return KAFKA.IS_ENABLED.get()
+
+def has_kafka_api():
+  return bool(KAFKA.API_URL.get())
+
+
+KAFKA = ConfigSection(
+  key='kafka',
+  help=_t("""Configuration options for Kafka management"""),
+  members=dict(
+    IS_ENABLED = Config(
+      key="is_enabled",
+      help=_t("Enable the Kafka integration."),
+      type=coerce_bool,
+      default=False
+    ),
+    API_URL=Config(
+      key='api_url',
+      help=_t('Base URL of Kafka REST API.'),
+      default=None),
+  )
+)

+ 5 - 10
desktop/libs/metadata/src/metadata/kafka_api.py → desktop/libs/kafka/src/kafka/kafka_api.py

@@ -19,9 +19,6 @@
 import json
 import json
 import logging
 import logging
 
 
-from metadata.manager_client import ManagerApi
-from metadata.kafka_client import KafkaApi
-
 try:
 try:
   from collections import OrderedDict
   from collections import OrderedDict
 except ImportError:
 except ImportError:
@@ -34,9 +31,10 @@ from django.views.decorators.http import require_POST
 
 
 from desktop.lib.django_util import JsonResponse
 from desktop.lib.django_util import JsonResponse
 from desktop.lib.i18n import force_unicode
 from desktop.lib.i18n import force_unicode
+from metadata.manager_client import ManagerApi
 
 
-from metadata.conf import has_navigator, has_kafka_api
-from metadata.navigator_client import NavigatorApiException
+from kafka.conf import has_kafka_api
+from kafka.kafka_client import KafkaApi, KafkaApiException
 
 
 
 
 LOG = logging.getLogger(__name__)
 LOG = logging.getLogger(__name__)
@@ -50,11 +48,8 @@ def error_handler(view_fn):
     }
     }
 
 
     try:
     try:
-      if has_navigator(args[0].user): # TODO
-        return view_fn(*args, **kwargs)
-      else:
-        raise NavigatorApiException('Navigator API is not configured.')
-    except NavigatorApiException, e:
+      return view_fn(*args, **kwargs)
+    except KafkaApiException, e:
       try:
       try:
         response['message'] = json.loads(e.message)
         response['message'] = json.loads(e.message)
       except Exception:
       except Exception:

+ 1 - 1
desktop/libs/metadata/src/metadata/kafka_client.py → desktop/libs/kafka/src/kafka/kafka_client.py

@@ -26,7 +26,7 @@ from desktop.lib.rest.http_client import RestException, HttpClient
 from desktop.lib.rest.resource import Resource
 from desktop.lib.rest.resource import Resource
 from desktop.lib.i18n import smart_unicode
 from desktop.lib.i18n import smart_unicode
 
 
-from metadata.conf import KAFKA
+from kafka.conf import KAFKA
 
 
 
 
 LOG = logging.getLogger(__name__)
 LOG = logging.getLogger(__name__)

+ 250 - 0
desktop/libs/kafka/src/kafka/locale/de/LC_MESSAGES/django.po

@@ -0,0 +1,250 @@
+# German translations for Hue.
+# Copyright (C) 2013 Cloudera, Inc
+# This file is distributed under the same license as the Hue project.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Hue VERSION\n"
+"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
+"POT-Creation-Date: 2018-03-07 10:04-0800\n"
+"PO-Revision-Date: 2013-10-28 10:31-0700\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: de <LL@li.org>\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 0.9.6\n"
+
+#: src/metadata/conf.py:88
+msgid "Configuration options for Optimizer API"
+msgstr "Konfigurationsoptionen für Optimizer-API"
+
+#: src/metadata/conf.py:92
+msgid "Hostname to Optimizer API or compatible service."
+msgstr "Hostname für Optimizer-API oder kompatiblen Dienst."
+
+#: src/metadata/conf.py:97
+msgid "The name of the key of the service."
+msgstr "Der Name des Dienstschlüssels."
+
+#: src/metadata/conf.py:102
+msgid "The private part of the key associated with the auth_key."
+msgstr "Der private Teil des dem Authentifizierungsschlüssel zugeordneten Schlüssels."
+
+#: src/metadata/conf.py:107
+msgid ""
+"Execute this script to produce the auth_key secret. This will be used "
+"when `auth_key_secret` is not set."
+msgstr ""
+"Führen Sie dieses Skript aus, um den geheimen Authentifizierungsschlüssel zu erstellen. Dieser wird verwendet, "
+"wenn 'auth_key_secret' nicht festgelegt ist."
+
+#: src/metadata/conf.py:113
+msgid ""
+"The name of the workload where queries are uploaded and optimizations are"
+" calculated from. Automatically guessed from auth_key and cluster_id if "
+"not specified."
+msgstr ""
+"Der Name des Workloads, in den Abfragen hochgeladen werden und aus dem Optimierungen"
+" berechnet werden. Wird automatisch aus Authentifizierungsschlüssel und Cluster-ID abgeleitet, wenn "
+"nicht angegeben."
+
+#: src/metadata/conf.py:118
+msgid ""
+"The name of the cluster used to determine the tenant id when this one is "
+"not specified. Defaults to the cluster Id or 'default'."
+msgstr ""
+"Der Name des Clusters, mit dem die Mandanten-ID bestimmt wird, wenn diese "
+"nicht angegeben ist. Standardmäßig wird die Cluster-ID oder 'default' verwendet."
+
+#: src/metadata/conf.py:124 src/metadata/conf.py:277
+msgid ""
+"Perform Sentry privilege filtering. Default to true automatically if the "
+"cluster is secure."
+msgstr ""
+"Führen Sie Sentry-Berechtigungsfilterung aus. Vorgabe ist automatisch True, wenn der "
+"Cluster sicher ist."
+
+#: src/metadata/conf.py:131
+msgid ""
+"The cache TTL in milliseconds for the assist/autocomplete/etc calls. Set "
+"to 0 to disable the cache."
+msgstr ""
+"Der TTL-Wert des Cache in Millisekunden für Unterstützungsaufrufe, "
+"Autovervollständigungsaufrufe usw. Ein Wert von 0 deaktiviert den Cache."
+
+#: src/metadata/conf.py:135
+msgid ""
+"Automatically upload queries after their execution in order to improve "
+"recommendations."
+msgstr ""
+"Abfragen nach ihrer Ausführung automatisch hochladen, um Empfehlungen "
+"zu verbessern."
+
+#: src/metadata/conf.py:141
+msgid ""
+"Automatically upload queried tables DDL in order to improve "
+"recommendations."
+msgstr ""
+"DDL der abgefragten Tabellen automatisch hochladen, um Empfehlungen "
+"zu verbessern."
+
+#: src/metadata/conf.py:147
+msgid ""
+"Automatically upload queried tables and columns stats in order to improve"
+" recommendations."
+msgstr ""
+"Statistiken von abgefragten Tabellen und Spalten automatisch hochladen, um Empfehlungen"
+" zu verbessern."
+
+#: src/metadata/conf.py:153
+msgid ""
+"Allow admins to upload the last N executed queries in the quick start "
+"wizard. Use 0 to disable."
+msgstr ""
+"Administratoren das Hochladen der letzten N ausgeführten Abfragen im Schnellstart"
+"-Assistenten erlauben. Zum Deaktivieren 0 verwenden."
+
+#: src/metadata/conf.py:211
+msgid "Configuration options for Navigator API"
+msgstr "Konfigurationsoptionen für Navigator-API"
+
+#: src/metadata/conf.py:215
+msgid "Base URL to Navigator API."
+msgstr "Basis-URL für die Navigator-API."
+
+#: src/metadata/conf.py:219
+msgid "Which authentication to use: CM or external via LDAP or SAML."
+msgstr "Die zu verwendende Authentifizierung: CM oder extern über LDAP oder SAML."
+
+#: src/metadata/conf.py:224
+msgid "Username of the CM user used for authentication."
+msgstr "Benutzername des für die Authentifizierung verwendeten CM-Benutzers."
+
+#: src/metadata/conf.py:228
+msgid "CM password of the user used for authentication."
+msgstr "CM-Kennwort des für die Authentifizierung verwendeten Benutzers."
+
+#: src/metadata/conf.py:233
+msgid ""
+"Execute this script to produce the CM password. This will be used when "
+"the plain password is not set."
+msgstr ""
+"Führen Sie dieses Skript aus, um das CM-Kennwort zu erstellen. Es wird verwendet, wenn "
+"das Nur-Text-Kennwort nicht festgelegt ist."
+
+#: src/metadata/conf.py:240
+msgid "Username of the LDAP user used for authentication."
+msgstr "Benutzername des für die Authentifizierung verwendeten LDAP-Benutzers."
+
+#: src/metadata/conf.py:244
+msgid "LDAP password of the user used for authentication."
+msgstr "LDAP-Kennwort des für die Authentifizierung verwendeten Benutzers."
+
+#: src/metadata/conf.py:249
+msgid ""
+"Execute this script to produce the LDAP password. This will be used when "
+"the plain password is not set."
+msgstr ""
+"Führen Sie dieses Skript aus, um das LDAP-Kennwort zu erstellen. Es wird verwendet, wenn "
+"das Nur-Text-Kennwort nicht festgelegt ist."
+
+#: src/metadata/conf.py:256
+msgid "Username of the SAML user used for authentication."
+msgstr "Benutzername des für die Authentifizierung verwendeten SAML-Benutzers."
+
+#: src/metadata/conf.py:260
+msgid "SAML password of the user used for authentication."
+msgstr "SAML-Kennwort des für die Authentifizierung verwendeten Benutzers."
+
+#: src/metadata/conf.py:265
+msgid ""
+"Execute this script to produce the SAML password. This will be used when "
+"the plain password  is not set."
+msgstr ""
+"Führen Sie dieses Skript aus, um das SAML-Kennwort zu erstellen. Es wird verwendet, wenn "
+"das Nur-Text-Kennwort nicht festgelegt ist."
+
+#: src/metadata/conf.py:272
+msgid ""
+"Navigator configuration directory, where navigator.client.properties is "
+"located."
+msgstr ""
+"Navigator-Konfigurationsverzeichnis, in dem sich navigator.client.properties "
+"befindet."
+
+#: src/metadata/conf.py:283
+msgid "Max number of items to fetch in one call in object search."
+msgstr "Maximale Anzahl von Elementen, die in einem Aufruf in Objektsuche abgerufen werden können."
+
+#: src/metadata/conf.py:289
+msgid "Max number of items to fetch in one call in object search autocomplete."
+msgstr "Maximale Anzahl von Elementen, die in einem Aufruf in Objektsuche-Autovervollständigung abgerufen werden können."
+
+#: src/metadata/conf.py:296
+msgid "Enable to search HDFS, S3 files."
+msgstr "Die Suche nach HDFS-, S3-Dateien aktivieren."
+
+#: src/metadata/navigator_api.py:422 src/metadata/navigator_api.py:448
+msgid ""
+"add_tags requires an 'id' parameter and 'tags' parameter that is a non-"
+"empty list of tags"
+msgstr ""
+"add_tags erfordert die Parameter \"id\" und \"tags\", die aus einer nicht"
+" leeren Liste von Tags bestehen"
+
+#: src/metadata/navigator_api.py:475
+msgid ""
+"update_properties requires an 'id' parameter and 'properties' or "
+"'metadata' parameters that are non-empty dicts"
+msgstr ""
+"update_properties erfordert einen 'id'-Parameter und 'properties' oder "
+"'metadata'-Parameter, die aus einem nicht leeren Wörterbuch bestehen"
+
+#: src/metadata/navigator_api.py:501
+msgid ""
+"update_properties requires an 'id' parameter and 'keys' parameter that is"
+" a non-empty list"
+msgstr ""
+"update_properties erfordert die Parameter \"id\" und \"keys\", die aus "
+"einer nicht leeren Liste bestehen"
+
+#: src/metadata/navigator_client.py:81 src/metadata/navigator_client.py:92
+#: src/metadata/navigator_client.py:103 src/metadata/optimizer_client.py:51
+msgid "No error message, please check the logs."
+msgstr "Keine Fehlermeldung. Überprüfen Sie die Protokolle."
+
+#: src/metadata/navigator_client.py:225 src/metadata/navigator_client.py:300
+msgid "Failed to authenticate."
+msgstr "Fehler bei der Authentifizierung."
+
+#: src/metadata/optimizer_api.py:351
+msgid "Query history upload requires Admin privileges or feature is disabled."
+msgstr "Für das Hochladen des Abfrageverlaufs sind Administratorberechtigungen erforderlich, oder das Feature muss deaktiviert sein."
+
+#: src/metadata/optimizer_api.py:376
+msgid "Skipped as task query"
+msgstr "Übersprungen als Task-Abfrage"
+
+#: src/metadata/optimizer_api.py:378
+msgid "Skipped"
+msgstr "Übersprungen"
+
+#: src/metadata/optimizer_client.py:176
+msgid "Error while accessing Optimizer"
+msgstr "Fehler beim Zugriff auf Optimizer"
+
+#: src/metadata/optimizer_client.py:235
+msgid "Call not supported"
+msgstr "Aufruf wird nicht unterstützt."
+
+#: src/metadata/optimizer_client.py:406
+#, python-format
+msgid "Could not get tenant id from cluster id %s: %s"
+msgstr "Die Mandanten-ID konnte nicht aus der Cluster-ID %s abgerufen werden: %s"
+
+#: src/metadata/workload_analytics_client.py:39
+msgid "Error accessing"
+msgstr "Fehler beim Zugriff"

+ 218 - 0
desktop/libs/kafka/src/kafka/locale/en/LC_MESSAGES/django.po

@@ -0,0 +1,218 @@
+# English translations for Hue.
+# Copyright (C) 2013 Cloudera, Inc
+# This file is distributed under the same license as the Hue project.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Hue VERSION\n"
+"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
+"POT-Creation-Date: 2018-03-07 10:04-0800\n"
+"PO-Revision-Date: 2013-10-28 10:31-0700\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: en <LL@li.org>\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 0.9.6\n"
+
+#: src/metadata/conf.py:88
+msgid "Configuration options for Optimizer API"
+msgstr ""
+
+#: src/metadata/conf.py:92
+msgid "Hostname to Optimizer API or compatible service."
+msgstr ""
+
+#: src/metadata/conf.py:97
+msgid "The name of the key of the service."
+msgstr ""
+
+#: src/metadata/conf.py:102
+msgid "The private part of the key associated with the auth_key."
+msgstr ""
+
+#: src/metadata/conf.py:107
+msgid ""
+"Execute this script to produce the auth_key secret. This will be used "
+"when `auth_key_secret` is not set."
+msgstr ""
+
+#: src/metadata/conf.py:113
+msgid ""
+"The name of the workload where queries are uploaded and optimizations are"
+" calculated from. Automatically guessed from auth_key and cluster_id if "
+"not specified."
+msgstr ""
+
+#: src/metadata/conf.py:118
+msgid ""
+"The name of the cluster used to determine the tenant id when this one is "
+"not specified. Defaults to the cluster Id or 'default'."
+msgstr ""
+
+#: src/metadata/conf.py:124 src/metadata/conf.py:277
+msgid ""
+"Perform Sentry privilege filtering. Default to true automatically if the "
+"cluster is secure."
+msgstr ""
+
+#: src/metadata/conf.py:131
+msgid ""
+"The cache TTL in milliseconds for the assist/autocomplete/etc calls. Set "
+"to 0 to disable the cache."
+msgstr ""
+
+#: src/metadata/conf.py:135
+msgid ""
+"Automatically upload queries after their execution in order to improve "
+"recommendations."
+msgstr ""
+
+#: src/metadata/conf.py:141
+msgid ""
+"Automatically upload queried tables DDL in order to improve "
+"recommendations."
+msgstr ""
+
+#: src/metadata/conf.py:147
+msgid ""
+"Automatically upload queried tables and columns stats in order to improve"
+" recommendations."
+msgstr ""
+
+#: src/metadata/conf.py:153
+msgid ""
+"Allow admins to upload the last N executed queries in the quick start "
+"wizard. Use 0 to disable."
+msgstr ""
+
+#: src/metadata/conf.py:211
+msgid "Configuration options for Navigator API"
+msgstr ""
+
+#: src/metadata/conf.py:215
+msgid "Base URL to Navigator API."
+msgstr ""
+
+#: src/metadata/conf.py:219
+msgid "Which authentication to use: CM or external via LDAP or SAML."
+msgstr ""
+
+#: src/metadata/conf.py:224
+msgid "Username of the CM user used for authentication."
+msgstr ""
+
+#: src/metadata/conf.py:228
+msgid "CM password of the user used for authentication."
+msgstr ""
+
+#: src/metadata/conf.py:233
+msgid ""
+"Execute this script to produce the CM password. This will be used when "
+"the plain password is not set."
+msgstr ""
+
+#: src/metadata/conf.py:240
+msgid "Username of the LDAP user used for authentication."
+msgstr ""
+
+#: src/metadata/conf.py:244
+msgid "LDAP password of the user used for authentication."
+msgstr ""
+
+#: src/metadata/conf.py:249
+msgid ""
+"Execute this script to produce the LDAP password. This will be used when "
+"the plain password is not set."
+msgstr ""
+
+#: src/metadata/conf.py:256
+msgid "Username of the SAML user used for authentication."
+msgstr ""
+
+#: src/metadata/conf.py:260
+msgid "SAML password of the user used for authentication."
+msgstr ""
+
+#: src/metadata/conf.py:265
+msgid ""
+"Execute this script to produce the SAML password. This will be used when "
+"the plain password  is not set."
+msgstr ""
+
+#: src/metadata/conf.py:272
+msgid ""
+"Navigator configuration directory, where navigator.client.properties is "
+"located."
+msgstr ""
+
+#: src/metadata/conf.py:283
+msgid "Max number of items to fetch in one call in object search."
+msgstr ""
+
+#: src/metadata/conf.py:289
+msgid "Max number of items to fetch in one call in object search autocomplete."
+msgstr ""
+
+#: src/metadata/conf.py:296
+msgid "Enable to search HDFS, S3 files."
+msgstr ""
+
+#: src/metadata/navigator_api.py:422 src/metadata/navigator_api.py:448
+msgid ""
+"add_tags requires an 'id' parameter and 'tags' parameter that is a non-"
+"empty list of tags"
+msgstr ""
+
+#: src/metadata/navigator_api.py:475
+msgid ""
+"update_properties requires an 'id' parameter and 'properties' or "
+"'metadata' parameters that are non-empty dicts"
+msgstr ""
+
+#: src/metadata/navigator_api.py:501
+msgid ""
+"update_properties requires an 'id' parameter and 'keys' parameter that is"
+" a non-empty list"
+msgstr ""
+
+#: src/metadata/navigator_client.py:81 src/metadata/navigator_client.py:92
+#: src/metadata/navigator_client.py:103 src/metadata/optimizer_client.py:51
+msgid "No error message, please check the logs."
+msgstr ""
+
+#: src/metadata/navigator_client.py:225 src/metadata/navigator_client.py:300
+msgid "Failed to authenticate."
+msgstr ""
+
+#: src/metadata/optimizer_api.py:351
+msgid "Query history upload requires Admin privileges or feature is disabled."
+msgstr ""
+
+#: src/metadata/optimizer_api.py:376
+msgid "Skipped as task query"
+msgstr ""
+
+#: src/metadata/optimizer_api.py:378
+msgid "Skipped"
+msgstr ""
+
+#: src/metadata/optimizer_client.py:176
+msgid "Error while accessing Optimizer"
+msgstr ""
+
+#: src/metadata/optimizer_client.py:235
+msgid "Call not supported"
+msgstr ""
+
+#: src/metadata/optimizer_client.py:406
+#, python-format
+msgid "Could not get tenant id from cluster id %s: %s"
+msgstr ""
+
+#: src/metadata/workload_analytics_client.py:39
+msgid "Error accessing"
+msgstr ""
+

+ 41 - 0
desktop/libs/kafka/src/kafka/locale/en_US.pot

@@ -0,0 +1,41 @@
+# Translations template for Hue.
+# Copyright (C) 2015 Cloudera, Inc
+# This file is distributed under the same license as the Hue project.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2015.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Hue VERSION\n"
+"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
+"POT-Creation-Date: 2015-12-22 08:50-0800\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 0.9.6\n"
+
+#: src/metadata/conf.py:40
+msgid "Configuration options for Navigator API"
+msgstr ""
+
+#: src/metadata/conf.py:44
+msgid "Base URL to Navigator API (e.g. - http://localhost:7187/api/v2)"
+msgstr ""
+
+#: src/metadata/conf.py:48
+msgid "Auth username of the hue user used for authentications."
+msgstr ""
+
+#: src/metadata/conf.py:53
+msgid "LDAP/PAM/.. password of the hue user used for authentications."
+msgstr ""
+
+#: src/metadata/conf.py:58
+msgid ""
+"Execute this script to produce the auth password. This will be used when "
+"`auth_password` is not set."
+msgstr ""
+

+ 250 - 0
desktop/libs/kafka/src/kafka/locale/es/LC_MESSAGES/django.po

@@ -0,0 +1,250 @@
+# Spanish translations for Hue.
+# Copyright (C) 2013 Cloudera, Inc
+# This file is distributed under the same license as the Hue project.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Hue VERSION\n"
+"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
+"POT-Creation-Date: 2018-03-07 10:04-0800\n"
+"PO-Revision-Date: 2013-10-28 10:31-0700\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: es <LL@li.org>\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 0.9.6\n"
+
+#: src/metadata/conf.py:88
+msgid "Configuration options for Optimizer API"
+msgstr "Opciones de configuración de la API del optimizador"
+
+#: src/metadata/conf.py:92
+msgid "Hostname to Optimizer API or compatible service."
+msgstr "El nombre de host de la API del optimizador o un servicio compatible."
+
+#: src/metadata/conf.py:97
+msgid "The name of the key of the service."
+msgstr "El nombre de la clave del servicio."
+
+#: src/metadata/conf.py:102
+msgid "The private part of the key associated with the auth_key."
+msgstr "La parte privada de la clave asociada a auth_key."
+
+#: src/metadata/conf.py:107
+msgid ""
+"Execute this script to produce the auth_key secret. This will be used "
+"when `auth_key_secret` is not set."
+msgstr ""
+"Ejecute esta secuencia de comandos para generar el secreto de auth_key. Este se usará "
+"cuando no se haya establecido 'auth_key_secret'."
+
+#: src/metadata/conf.py:113
+msgid ""
+"The name of the workload where queries are uploaded and optimizations are"
+" calculated from. Automatically guessed from auth_key and cluster_id if "
+"not specified."
+msgstr ""
+"El nombre de la carga de trabajo donde se cargan las consultas y se calculan las "
+" optimizaciones. Si no se especifica, se deducirá automáticamente de auth_key y "
+"cluster_id."
+
+#: src/metadata/conf.py:118
+msgid ""
+"The name of the cluster used to determine the tenant id when this one is "
+"not specified. Defaults to the cluster Id or 'default'."
+msgstr ""
+"El nombre del clúster empleado para determinar el ID de inquilino cuando no se "
+"especifica. Se aplican los valores predeterminados para el ID del clúster, o se establece como 'default'."
+
+#: src/metadata/conf.py:124 src/metadata/conf.py:277
+msgid ""
+"Perform Sentry privilege filtering. Default to true automatically if the "
+"cluster is secure."
+msgstr ""
+"Realice el filtrado de privilegios Sentry. Se utiliza true automáticamente si el "
+"clúster es seguro."
+
+#: src/metadata/conf.py:131
+msgid ""
+"The cache TTL in milliseconds for the assist/autocomplete/etc calls. Set "
+"to 0 to disable the cache."
+msgstr ""
+"El TTL de caché en milisegundos de las llamadas de asistencia, autocompletación, etc. Defínalo "
+"en 0 para desactivar la caché."
+
+#: src/metadata/conf.py:135
+msgid ""
+"Automatically upload queries after their execution in order to improve "
+"recommendations."
+msgstr ""
+"Carga automáticamente las consultas tras su ejecución para mejorar "
+"las recomendaciones."
+
+#: src/metadata/conf.py:141
+msgid ""
+"Automatically upload queried tables DDL in order to improve "
+"recommendations."
+msgstr ""
+"Carga automáticamente el DDL de las tablas consultadas para mejorar "
+"las recomendaciones."
+
+#: src/metadata/conf.py:147
+msgid ""
+"Automatically upload queried tables and columns stats in order to improve"
+" recommendations."
+msgstr ""
+"Carga automáticamente las estadísticas de las tablas y columnas consultadas para mejorar"
+" las recomendaciones."
+
+#: src/metadata/conf.py:153
+msgid ""
+"Allow admins to upload the last N executed queries in the quick start "
+"wizard. Use 0 to disable."
+msgstr ""
+"Permite a los administradores cargar las últimas N consultas ejecutadas en el asistente de "
+"inicio rápido. Use 0 para deshabilitar esta opción."
+
+#: src/metadata/conf.py:211
+msgid "Configuration options for Navigator API"
+msgstr "Opciones de configuración de la API de Navigator"
+
+#: src/metadata/conf.py:215
+msgid "Base URL to Navigator API."
+msgstr "URL de base para la API Navigator."
+
+#: src/metadata/conf.py:219
+msgid "Which authentication to use: CM or external via LDAP or SAML."
+msgstr "La autenticación que se usará: CM o externa mediante LDAP o SAML."
+
+#: src/metadata/conf.py:224
+msgid "Username of the CM user used for authentication."
+msgstr "Nombre del usuario de CM empleado para la autenticación."
+
+#: src/metadata/conf.py:228
+msgid "CM password of the user used for authentication."
+msgstr "Contraseña de CM del usuario empleado para la autenticación."
+
+#: src/metadata/conf.py:233
+msgid ""
+"Execute this script to produce the CM password. This will be used when "
+"the plain password is not set."
+msgstr ""
+"Ejecute esta secuencia de comandos para generar la contraseña de CM. Esta se usará cuando "
+"no se haya establecido la contraseña simple."
+
+#: src/metadata/conf.py:240
+msgid "Username of the LDAP user used for authentication."
+msgstr "Nombre del usuario de LDAP empleado para la autenticación."
+
+#: src/metadata/conf.py:244
+msgid "LDAP password of the user used for authentication."
+msgstr "Contraseña de LDAP del usuario empleado para la autenticación."
+
+#: src/metadata/conf.py:249
+msgid ""
+"Execute this script to produce the LDAP password. This will be used when "
+"the plain password is not set."
+msgstr ""
+"Ejecute esta secuencia de comandos para generar la contraseña de LDAP. Esta se usará cuando "
+"no se haya establecido la contraseña simple."
+
+#: src/metadata/conf.py:256
+msgid "Username of the SAML user used for authentication."
+msgstr "Nombre del usuario de SAML empleado para la autenticación."
+
+#: src/metadata/conf.py:260
+msgid "SAML password of the user used for authentication."
+msgstr "Contraseña de SAML del usuario empleado para la autenticación."
+
+#: src/metadata/conf.py:265
+msgid ""
+"Execute this script to produce the SAML password. This will be used when "
+"the plain password  is not set."
+msgstr ""
+"Ejecute esta secuencia de comandos para generar la contraseña de SAML. Esta se usará cuando "
+"no se haya establecido la contraseña simple."
+
+#: src/metadata/conf.py:272
+msgid ""
+"Navigator configuration directory, where navigator.client.properties is "
+"located."
+msgstr ""
+"Directorio de configuración de Navigator, donde navigator.client.properties está "
+"ubicado."
+
+#: src/metadata/conf.py:283
+msgid "Max number of items to fetch in one call in object search."
+msgstr "Número máximo de elementos que se recuperan en una llamada de búsqueda de objetos."
+
+#: src/metadata/conf.py:289
+msgid "Max number of items to fetch in one call in object search autocomplete."
+msgstr "Número máximo de elementos que se recuperan en una llamada de autocompletación de búsqueda de objetos."
+
+#: src/metadata/conf.py:296
+msgid "Enable to search HDFS, S3 files."
+msgstr "Habilite esta opción para buscar archivos de HDFS y S3."
+
+#: src/metadata/navigator_api.py:422 src/metadata/navigator_api.py:448
+msgid ""
+"add_tags requires an 'id' parameter and 'tags' parameter that is a non-"
+"empty list of tags"
+msgstr ""
+"add_tags requiere un parámetro 'id' y un parámetro 'tags' que sea una "
+"lista de etiquetas poblada"
+
+#: src/metadata/navigator_api.py:475
+msgid ""
+"update_properties requires an 'id' parameter and 'properties' or "
+"'metadata' parameters that are non-empty dicts"
+msgstr ""
+"update_properties requiere un parámetro 'id' y parámetros 'properties' "
+"o 'metadata' que sean diccionarios poblados"
+
+#: src/metadata/navigator_api.py:501
+msgid ""
+"update_properties requires an 'id' parameter and 'keys' parameter that is"
+" a non-empty list"
+msgstr ""
+"update_properties requiere un parámetro 'id' y un parámetro 'keys' que "
+"sea una lista poblada"
+
+#: src/metadata/navigator_client.py:81 src/metadata/navigator_client.py:92
+#: src/metadata/navigator_client.py:103 src/metadata/optimizer_client.py:51
+msgid "No error message, please check the logs."
+msgstr "No hay ningún mensaje de error; consulte los registros."
+
+#: src/metadata/navigator_client.py:225 src/metadata/navigator_client.py:300
+msgid "Failed to authenticate."
+msgstr "Error de autenticación."
+
+#: src/metadata/optimizer_api.py:351
+msgid "Query history upload requires Admin privileges or feature is disabled."
+msgstr "La carga del historial de consultas requiere privilegios de administrador, o la característica no está habilitada."
+
+#: src/metadata/optimizer_api.py:376
+msgid "Skipped as task query"
+msgstr "Omitido como consulta de tarea"
+
+#: src/metadata/optimizer_api.py:378
+msgid "Skipped"
+msgstr "Omitido"
+
+#: src/metadata/optimizer_client.py:176
+msgid "Error while accessing Optimizer"
+msgstr "Error al acceder al optimizador"
+
+#: src/metadata/optimizer_client.py:235
+msgid "Call not supported"
+msgstr "La llamada no es compatible"
+
+#: src/metadata/optimizer_client.py:406
+#, python-format
+msgid "Could not get tenant id from cluster id %s: %s"
+msgstr "No se ha podido obtener el ID de inquilino del ID del clúster %s: %s."
+
+#: src/metadata/workload_analytics_client.py:39
+msgid "Error accessing"
+msgstr "Error de acceso"

+ 250 - 0
desktop/libs/kafka/src/kafka/locale/fr/LC_MESSAGES/django.po

@@ -0,0 +1,250 @@
+# French translations for Hue.
+# Copyright (C) 2013 Cloudera, Inc
+# This file is distributed under the same license as the Hue project.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Hue VERSION\n"
+"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
+"POT-Creation-Date: 2018-03-07 10:04-0800\n"
+"PO-Revision-Date: 2013-10-28 10:31-0700\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: fr <LL@li.org>\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 0.9.6\n"
+
+#: src/metadata/conf.py:88
+msgid "Configuration options for Optimizer API"
+msgstr "Options de configuration pour l'API Optimizer"
+
+#: src/metadata/conf.py:92
+msgid "Hostname to Optimizer API or compatible service."
+msgstr "Nom d'hôte de l'API Optimizer ou du service compatible."
+
+#: src/metadata/conf.py:97
+msgid "The name of the key of the service."
+msgstr "Nom de la clé du service."
+
+#: src/metadata/conf.py:102
+msgid "The private part of the key associated with the auth_key."
+msgstr "Partie privée de la clé associée à auth_key."
+
+#: src/metadata/conf.py:107
+msgid ""
+"Execute this script to produce the auth_key secret. This will be used "
+"when `auth_key_secret` is not set."
+msgstr ""
+"Exécutez ce script pour produire le secret auth_key. Cela sera utilisé "
+"si « auth_key_secret » n’est pas défini."
+
+#: src/metadata/conf.py:113
+msgid ""
+"The name of the workload where queries are uploaded and optimizations are"
+" calculated from. Automatically guessed from auth_key and cluster_id if "
+"not specified."
+msgstr ""
+"Nom de la charge de travail dans laquelle les requêtes sont chargées et à partir de laquelle les optimisations sont"
+" calculées. Déterminé automatiquement à partir de auth_key et cluster_id si "
+"n'est pas spécifié."
+
+#: src/metadata/conf.py:118
+msgid ""
+"The name of the cluster used to determine the tenant id when this one is "
+"not specified. Defaults to the cluster Id or 'default'."
+msgstr ""
+"Nom du cluster utilisé pour déterminer l’ID de locataire lorsque celui-ci n’est "
+"pas spécifié. Utilise par défaut l’ID de cluster ou « default »."
+
+#: src/metadata/conf.py:124 src/metadata/conf.py:277
+msgid ""
+"Perform Sentry privilege filtering. Default to true automatically if the "
+"cluster is secure."
+msgstr ""
+"Effectuez le filtrage des privilèges Sentry. La valeur par défaut True est automatiquement appliquée si le "
+"cluster est sécurisé."
+
+#: src/metadata/conf.py:131
+msgid ""
+"The cache TTL in milliseconds for the assist/autocomplete/etc calls. Set "
+"to 0 to disable the cache."
+msgstr ""
+"TTL du cache, en millisecondes, pour les appels assist/autocomplete/etc. Réglez-le "
+"sur 0 pour désactiver le cache."
+
+#: src/metadata/conf.py:135
+msgid ""
+"Automatically upload queries after their execution in order to improve "
+"recommendations."
+msgstr ""
+"Charger automatiquement les requêtes après leur exécution pour améliorer "
+"les recommandations."
+
+#: src/metadata/conf.py:141
+msgid ""
+"Automatically upload queried tables DDL in order to improve "
+"recommendations."
+msgstr ""
+"Chargez automatiquement les DDL des tables pour améliorer les "
+"recommandations."
+
+#: src/metadata/conf.py:147
+msgid ""
+"Automatically upload queried tables and columns stats in order to improve"
+" recommendations."
+msgstr ""
+"Chargez automatiquement les tables interrogées et les statistiques de colonnes pour améliorer les"
+" recommandations."
+
+#: src/metadata/conf.py:153
+msgid ""
+"Allow admins to upload the last N executed queries in the quick start "
+"wizard. Use 0 to disable."
+msgstr ""
+"Autoriser les administrateurs à charger les N dernières requêtes exécutées dans l’assistant de "
+"démarrage rapide. Utilisez la valeur 0 pour désactiver cette option."
+
+#: src/metadata/conf.py:211
+msgid "Configuration options for Navigator API"
+msgstr "Options de configuration pour l'API de navigateur"
+
+#: src/metadata/conf.py:215
+msgid "Base URL to Navigator API."
+msgstr "URL de base vers l'API de navigateur."
+
+#: src/metadata/conf.py:219
+msgid "Which authentication to use: CM or external via LDAP or SAML."
+msgstr "Authentification à utiliser : CM ou externe via LDAP ou SAML."
+
+#: src/metadata/conf.py:224
+msgid "Username of the CM user used for authentication."
+msgstr "Nom de l’utilisateur CM utilisé pour l’authentification."
+
+#: src/metadata/conf.py:228
+msgid "CM password of the user used for authentication."
+msgstr "Mot de passe CM de l’utilisateur utilisé pour l’authentification."
+
+#: src/metadata/conf.py:233
+msgid ""
+"Execute this script to produce the CM password. This will be used when "
+"the plain password is not set."
+msgstr ""
+"Exécutez ce script pour générer le mot de passe CM. Il sera utilisé si "
+"le mot de passe normal n'est pas défini."
+
+#: src/metadata/conf.py:240
+msgid "Username of the LDAP user used for authentication."
+msgstr "Nom de l’utilisateur LDAP utilisé pour l’authentification."
+
+#: src/metadata/conf.py:244
+msgid "LDAP password of the user used for authentication."
+msgstr "Mot de passe LDAP de l’utilisateur utilisé pour l’authentification."
+
+#: src/metadata/conf.py:249
+msgid ""
+"Execute this script to produce the LDAP password. This will be used when "
+"the plain password is not set."
+msgstr ""
+"Exécutez ce script pour générer le mot de passe LDAP. Il sera utilisé si "
+"le mot de passe normal n'est pas défini."
+
+#: src/metadata/conf.py:256
+msgid "Username of the SAML user used for authentication."
+msgstr "Nom de l’utilisateur SAML utilisé pour l’authentification."
+
+#: src/metadata/conf.py:260
+msgid "SAML password of the user used for authentication."
+msgstr "Mot de passe SAML de l’utilisateur utilisé pour l’authentification."
+
+#: src/metadata/conf.py:265
+msgid ""
+"Execute this script to produce the SAML password. This will be used when "
+"the plain password  is not set."
+msgstr ""
+"Exécutez ce script pour générer le mot de passe SAML. Il sera utilisé si "
+"le mot de passe normal n'est pas défini."
+
+#: src/metadata/conf.py:272
+msgid ""
+"Navigator configuration directory, where navigator.client.properties is "
+"located."
+msgstr ""
+"Répertoire de configuration du navigateur, dans lequel se trouve "
+"navigator.client.properties."
+
+#: src/metadata/conf.py:283
+msgid "Max number of items to fetch in one call in object search."
+msgstr "Nombre maximal d'éléments à récupérer lors d'un appel de recherche d'objets."
+
+#: src/metadata/conf.py:289
+msgid "Max number of items to fetch in one call in object search autocomplete."
+msgstr "Nombre maximal d'éléments à récupérer lors d'un appel de remplissage automatique de recherche d'objets."
+
+#: src/metadata/conf.py:296
+msgid "Enable to search HDFS, S3 files."
+msgstr "Activez cette option pour rechercher des fichiers S3 HDFS."
+
+#: src/metadata/navigator_api.py:422 src/metadata/navigator_api.py:448
+msgid ""
+"add_tags requires an 'id' parameter and 'tags' parameter that is a non-"
+"empty list of tags"
+msgstr ""
+"add_tags requiert un paramètre 'id' et un paramètre 'tags' constitué "
+"d'une liste d'étiquettes non vide"
+
+#: src/metadata/navigator_api.py:475
+msgid ""
+"update_properties requires an 'id' parameter and 'properties' or "
+"'metadata' parameters that are non-empty dicts"
+msgstr ""
+"update_properties requiert un paramètre 'id' et des paramètres 'properties' ou "
+"'metadata' constitués d'un dictionnaire non vide"
+
+#: src/metadata/navigator_api.py:501
+msgid ""
+"update_properties requires an 'id' parameter and 'keys' parameter that is"
+" a non-empty list"
+msgstr ""
+"update_properties requiert un paramètre 'id' et un paramètre 'keys' "
+"constitué d'une liste non vide"
+
+#: src/metadata/navigator_client.py:81 src/metadata/navigator_client.py:92
+#: src/metadata/navigator_client.py:103 src/metadata/optimizer_client.py:51
+msgid "No error message, please check the logs."
+msgstr "Aucun message d'erreur. Consultez les fichiers journaux."
+
+#: src/metadata/navigator_client.py:225 src/metadata/navigator_client.py:300
+msgid "Failed to authenticate."
+msgstr "Echec de l’authentification."
+
+#: src/metadata/optimizer_api.py:351
+msgid "Query history upload requires Admin privileges or feature is disabled."
+msgstr "Le chargement de l’historique des requêtes nécessite des privilèges d’administrateur ou la fonctionnalité est désactivée."
+
+#: src/metadata/optimizer_api.py:376
+msgid "Skipped as task query"
+msgstr "Ignoré, car il s'agit d'une requête relative à une tâche"
+
+#: src/metadata/optimizer_api.py:378
+msgid "Skipped"
+msgstr "Ignoré"
+
+#: src/metadata/optimizer_client.py:176
+msgid "Error while accessing Optimizer"
+msgstr "Erreur lors de l'accès à Optimizer"
+
+#: src/metadata/optimizer_client.py:235
+msgid "Call not supported"
+msgstr "Appel non pris en charge"
+
+#: src/metadata/optimizer_client.py:406
+#, python-format
+msgid "Could not get tenant id from cluster id %s: %s"
+msgstr "Impossible d'obtenir l'ID de locataire à partir de l'ID de cluster %s : %s"
+
+#: src/metadata/workload_analytics_client.py:39
+msgid "Error accessing"
+msgstr "Erreur d'accès"

+ 244 - 0
desktop/libs/kafka/src/kafka/locale/ja/LC_MESSAGES/django.po

@@ -0,0 +1,244 @@
+# Japanese translations for Hue.
+# Copyright (C) 2013 Cloudera, Inc
+# This file is distributed under the same license as the Hue project.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Hue VERSION\n"
+"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
+"POT-Creation-Date: 2018-03-07 10:04-0800\n"
+"PO-Revision-Date: 2013-10-28 10:31-0700\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: ja <LL@li.org>\n"
+"Plural-Forms: nplurals=1; plural=0\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 0.9.6\n"
+
+#: src/metadata/conf.py:88
+msgid "Configuration options for Optimizer API"
+msgstr "Optimizer API の設定オプション"
+
+#: src/metadata/conf.py:92
+msgid "Hostname to Optimizer API or compatible service."
+msgstr "Optimizer API または対応サービスのホスト名です。"
+
+#: src/metadata/conf.py:97
+msgid "The name of the key of the service."
+msgstr "サービスのキーの名前です。"
+
+#: src/metadata/conf.py:102
+msgid "The private part of the key associated with the auth_key."
+msgstr "auth_key に関連付けられたキーの公開部分です。"
+
+#: src/metadata/conf.py:107
+msgid ""
+"Execute this script to produce the auth_key secret. This will be used "
+"when `auth_key_secret` is not set."
+msgstr ""
+"このスクリプトを実行して auth_key シークレットを作成します。これは auth_key_secret が"
+"設定されていない場合に利用されます。"
+
+#: src/metadata/conf.py:113
+msgid ""
+"The name of the workload where queries are uploaded and optimizations are"
+" calculated from. Automatically guessed from auth_key and cluster_id if "
+"not specified."
+msgstr ""
+"クエリがアップロードされた、最適化の計算に使用されるワークロードの名前です。"
+"指定されていない場合は、auth_key と cluster_id から自動的に"
+"推測されます。"
+
+#: src/metadata/conf.py:118
+msgid ""
+"The name of the cluster used to determine the tenant id when this one is "
+"not specified. Defaults to the cluster Id or 'default'."
+msgstr ""
+"テナント ID が指定されていない場合に特定するために使用されるクラスタの名前です。"
+"デフォルトはクラスタ ID または 'default' です。"
+
+#: src/metadata/conf.py:124 src/metadata/conf.py:277
+msgid ""
+"Perform Sentry privilege filtering. Default to true automatically if the "
+"cluster is secure."
+msgstr ""
+"Sentry 権限のフィルタ処理を実行します。デフォルトでは、クラスタがセキュアな場合、"
+"自動的に True に設定されます。"
+
+#: src/metadata/conf.py:131
+msgid ""
+"The cache TTL in milliseconds for the assist/autocomplete/etc calls. Set "
+"to 0 to disable the cache."
+msgstr ""
+"assist/autocomplete/etc コールのためのキャッシュ TTL(ミリ秒)です。"
+"0 に設定すると、キャッシュが無効になります。"
+
+#: src/metadata/conf.py:135
+msgid ""
+"Automatically upload queries after their execution in order to improve "
+"recommendations."
+msgstr ""
+"クエリを実行した後に、推奨事項の精度を高めるために自動的にアップロードします。"
+""
+
+#: src/metadata/conf.py:141
+msgid ""
+"Automatically upload queried tables DDL in order to improve "
+"recommendations."
+msgstr "<Hi_break/>クエリを実行したテーブルの DDL が自動的にアップロードされ、推奨事項の精度が"
+"高まります。"
+
+#: src/metadata/conf.py:147
+msgid ""
+"Automatically upload queried tables and columns stats in order to improve"
+" recommendations."
+msgstr "<Hi_break/>クエリを実行したテーブルと列の統計が自動的にアップロードされ、推奨事項の精度が"
+"高まります。"
+
+#: src/metadata/conf.py:153
+msgid ""
+"Allow admins to upload the last N executed queries in the quick start "
+"wizard. Use 0 to disable."
+msgstr ""
+"最近実行した N 件のクエリをクイックスタートウィザードでアップロードできるように"
+"管理者に許可します。無効にする場合は 0 を使用します。"
+
+#: src/metadata/conf.py:211
+msgid "Configuration options for Navigator API"
+msgstr "Navigator API の設定オプション"
+
+#: src/metadata/conf.py:215
+msgid "Base URL to Navigator API."
+msgstr "Navigator API のベース URL です。"
+
+#: src/metadata/conf.py:219
+msgid "Which authentication to use: CM or external via LDAP or SAML."
+msgstr "使用する認証を指定します。CM か外部(LDAP または SAML)を指定できます。"
+
+#: src/metadata/conf.py:224
+msgid "Username of the CM user used for authentication."
+msgstr "認証に使用する CM ユーザーのユーザー名です。"
+
+#: src/metadata/conf.py:228
+msgid "CM password of the user used for authentication."
+msgstr "認証に使用する CM ユーザーのパスワードです。"
+
+#: src/metadata/conf.py:233
+msgid ""
+"Execute this script to produce the CM password. This will be used when "
+"the plain password is not set."
+msgstr ""
+"このスクリプトを実行して CM パスワードを作成します。これはプレーンパスワードが"
+"設定されていない場合に利用されます。"
+
+#: src/metadata/conf.py:240
+msgid "Username of the LDAP user used for authentication."
+msgstr "認証に使用する LDAP ユーザーのユーザー名です。"
+
+#: src/metadata/conf.py:244
+msgid "LDAP password of the user used for authentication."
+msgstr "認証に使用する LDAP ユーザーのパスワードです。"
+
+#: src/metadata/conf.py:249
+msgid ""
+"Execute this script to produce the LDAP password. This will be used when "
+"the plain password is not set."
+msgstr ""
+"このスクリプトを実行して LDAP パスワードを作成します。これはプレーンパスワードが"
+"設定されていない場合に利用されます。"
+
+#: src/metadata/conf.py:256
+msgid "Username of the SAML user used for authentication."
+msgstr "認証に使用する SAML ユーザーのユーザー名です。"
+
+#: src/metadata/conf.py:260
+msgid "SAML password of the user used for authentication."
+msgstr "認証に使用する SAML ユーザーのパスワードです。"
+
+#: src/metadata/conf.py:265
+msgid ""
+"Execute this script to produce the SAML password. This will be used when "
+"the plain password  is not set."
+msgstr ""
+"このスクリプトを実行して SAML パスワードを作成します。これはプレーンパスワードが"
+"設定されていない場合に利用されます。"
+
+#: src/metadata/conf.py:272
+msgid ""
+"Navigator configuration directory, where navigator.client.properties is "
+"located."
+msgstr ""
+"navigator.client.properties が格納されている Navigator 設定"
+"ディレクトリです。"
+
+#: src/metadata/conf.py:283
+msgid "Max number of items to fetch in one call in object search."
+msgstr "オブジェクト検索の 1 回のコールでフェッチされるアイテムの最大数。"
+
+#: src/metadata/conf.py:289
+msgid "Max number of items to fetch in one call in object search autocomplete."
+msgstr "オブジェクト検索のオートコンプリートの 1 回のコールでフェッチされるアイテムの最大数。"
+
+#: src/metadata/conf.py:296
+msgid "Enable to search HDFS, S3 files."
+msgstr "HDFS の S3 ファイルの検索を有効にします。"
+
+#: src/metadata/navigator_api.py:422 src/metadata/navigator_api.py:448
+msgid ""
+"add_tags requires an 'id' parameter and 'tags' parameter that is a non-"
+"empty list of tags"
+msgstr "add_tags には、'id' パラメーターと 'tags' パラメーターが指定された、空ではないタグリストが必要です"
+
+#: src/metadata/navigator_api.py:475
+msgid ""
+"update_properties requires an 'id' parameter and 'properties' or "
+"'metadata' parameters that are non-empty dicts"
+msgstr ""
+"update_properties には、id パラメーターと properties パラメーターまたは "
+"metadata パラメーターが指定された空ではない dict が必要です"
+
+#: src/metadata/navigator_api.py:501
+msgid ""
+"update_properties requires an 'id' parameter and 'keys' parameter that is"
+" a non-empty list"
+msgstr "update_properties には、id パラメーターと keys パラメーターが指定された空ではないリストが必要です"
+
+#: src/metadata/navigator_client.py:81 src/metadata/navigator_client.py:92
+#: src/metadata/navigator_client.py:103 src/metadata/optimizer_client.py:51
+msgid "No error message, please check the logs."
+msgstr "エラーメッセージがありません。ログを確認してください。"
+
+#: src/metadata/navigator_client.py:225 src/metadata/navigator_client.py:300
+msgid "Failed to authenticate."
+msgstr "認証に失敗しました。"
+
+#: src/metadata/optimizer_api.py:351
+msgid "Query history upload requires Admin privileges or feature is disabled."
+msgstr "クエリの履歴をアップロードできません。管理者権限がないか、機能が無効になっています。"
+
+#: src/metadata/optimizer_api.py:376
+msgid "Skipped as task query"
+msgstr "タスククエリとしてスキップ"
+
+#: src/metadata/optimizer_api.py:378
+msgid "Skipped"
+msgstr "スキップ"
+
+#: src/metadata/optimizer_client.py:176
+msgid "Error while accessing Optimizer"
+msgstr "Optimizer へのアクセス中にエラーが発生しました"
+
+#: src/metadata/optimizer_client.py:235
+msgid "Call not supported"
+msgstr "サポートされていない呼び出しです"
+
+#: src/metadata/optimizer_client.py:406
+#, python-format
+msgid "Could not get tenant id from cluster id %s: %s"
+msgstr "テナント ID をクラスタ ID %s から取得できませんでした:%s"
+
+#: src/metadata/workload_analytics_client.py:39
+msgid "Error accessing"
+msgstr "アクセス時にエラーが発生しました"

+ 246 - 0
desktop/libs/kafka/src/kafka/locale/ko/LC_MESSAGES/django.po

@@ -0,0 +1,246 @@
+# Korean translations for Hue.
+# Copyright (C) 2013 Cloudera, Inc
+# This file is distributed under the same license as the Hue project.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Hue VERSION\n"
+"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
+"POT-Creation-Date: 2018-03-07 10:04-0800\n"
+"PO-Revision-Date: 2013-10-28 10:31-0700\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: ko <LL@li.org>\n"
+"Plural-Forms: nplurals=1; plural=0\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 0.9.6\n"
+
+#: src/metadata/conf.py:88
+msgid "Configuration options for Optimizer API"
+msgstr "Optimizer API에 대한 구성 옵션"
+
+#: src/metadata/conf.py:92
+msgid "Hostname to Optimizer API or compatible service."
+msgstr "Optimizer API 또는 호환되는 서비스의 호스트 이름입니다."
+
+#: src/metadata/conf.py:97
+msgid "The name of the key of the service."
+msgstr "서비스 키의 이름입니다."
+
+#: src/metadata/conf.py:102
+msgid "The private part of the key associated with the auth_key."
+msgstr "auth_key와 연결된 키의 비공개 부분입니다."
+
+#: src/metadata/conf.py:107
+msgid ""
+"Execute this script to produce the auth_key secret. This will be used "
+"when `auth_key_secret` is not set."
+msgstr ""
+"auth_key 암호를 생성하려면 이 스크립트를 실행하십시오. "
+"이 암호는 `auth_key_secret`가 설정되지 않은 경우에 사용됩니다."
+
+#: src/metadata/conf.py:113
+msgid ""
+"The name of the workload where queries are uploaded and optimizations are"
+" calculated from. Automatically guessed from auth_key and cluster_id if "
+"not specified."
+msgstr ""
+"쿼리가 업로드되고 최적화 계산에 사용된 워크로드의 이름입니다."
+" 이름이 지정되지 않은 경우 auth_key 및 cluster_id를 기반으로 자동으로 추측됩니다."
+""
+
+#: src/metadata/conf.py:118
+msgid ""
+"The name of the cluster used to determine the tenant id when this one is "
+"not specified. Defaults to the cluster Id or 'default'."
+msgstr ""
+"테넌트 ID가 지정되지 않은 경우 테넌트 ID를 결정하는 데 사용되는 클러스터 이름입니다. "
+"클러스터 ID 또는 'default'가 기본값으로 설정됩니다."
+
+#: src/metadata/conf.py:124 src/metadata/conf.py:277
+msgid ""
+"Perform Sentry privilege filtering. Default to true automatically if the "
+"cluster is secure."
+msgstr ""
+"Sentry 권한 필터링을 수행합니다. 클러스터에 보안이 적용되는 경우 기본값은 자동으로 "
+"true입니다."
+
+#: src/metadata/conf.py:131
+msgid ""
+"The cache TTL in milliseconds for the assist/autocomplete/etc calls. Set "
+"to 0 to disable the cache."
+msgstr ""
+"지원, 자동 완성 등의 호출에 대한 캐시 TTL(밀리초)입니다. 캐시를 해제하려면 "
+"0으로 설정합니다."
+
+#: src/metadata/conf.py:135
+msgid ""
+"Automatically upload queries after their execution in order to improve "
+"recommendations."
+msgstr ""
+"권장사항 향상을 위해 쿼리가 실행된 후 자동으로 "
+"업로드됩니다."
+
+#: src/metadata/conf.py:141
+msgid ""
+"Automatically upload queried tables DDL in order to improve "
+"recommendations."
+msgstr ""
+"권장사항 향상을 위해 쿼리된 DDL 테이블이 자동으로 "
+"업로드됩니다."
+
+#: src/metadata/conf.py:147
+msgid ""
+"Automatically upload queried tables and columns stats in order to improve"
+" recommendations."
+msgstr ""
+"권장사항 향상을 위해 쿼리된 테이블 및 열 상태가 자동으로 "
+"업로드됩니다."
+
+#: src/metadata/conf.py:153
+msgid ""
+"Allow admins to upload the last N executed queries in the quick start "
+"wizard. Use 0 to disable."
+msgstr ""
+"빠른 시작 마법사에서 마지막으로 실행된 N개 쿼리를 관리자가 업로드할 수 있도록 "
+"허용합니다. 해제하려면 0을 사용하십시오."
+
+#: src/metadata/conf.py:211
+msgid "Configuration options for Navigator API"
+msgstr "Navigator API에 대한 구성 옵션"
+
+#: src/metadata/conf.py:215
+msgid "Base URL to Navigator API."
+msgstr "Navigator API에 대한 기본 URL."
+
+#: src/metadata/conf.py:219
+msgid "Which authentication to use: CM or external via LDAP or SAML."
+msgstr "사용할 인증입니다. 이는 CM 또는 LDAP/SAML을 통한 외부 인증 중 하나입니다."
+
+#: src/metadata/conf.py:224
+msgid "Username of the CM user used for authentication."
+msgstr "인증에 사용된 CM 사용자의 사용자 이름입니다."
+
+#: src/metadata/conf.py:228
+msgid "CM password of the user used for authentication."
+msgstr "인증에 사용된 사용자의 CM 암호입니다."
+
+#: src/metadata/conf.py:233
+msgid ""
+"Execute this script to produce the CM password. This will be used when "
+"the plain password is not set."
+msgstr ""
+"CM 암호를 생성하려면 이 스크립트를 실행하십시오. 이 암호는 일반 암호가 "
+"설정되지 않은 경우에 사용됩니다."
+
+#: src/metadata/conf.py:240
+msgid "Username of the LDAP user used for authentication."
+msgstr "인증에 사용된 LDAP 사용자의 사용자 이름입니다."
+
+#: src/metadata/conf.py:244
+msgid "LDAP password of the user used for authentication."
+msgstr "인증에 사용된 사용자의 LDAP 암호입니다."
+
+#: src/metadata/conf.py:249
+msgid ""
+"Execute this script to produce the LDAP password. This will be used when "
+"the plain password is not set."
+msgstr ""
+"LDAP 암호를 생성하려면 이 스크립트를 실행하십시오. 이 암호는 일반 암호가 "
+"설정되지 않은 경우에 사용됩니다."
+
+#: src/metadata/conf.py:256
+msgid "Username of the SAML user used for authentication."
+msgstr "인증에 사용된 SAML 사용자의 사용자 이름입니다."
+
+#: src/metadata/conf.py:260
+msgid "SAML password of the user used for authentication."
+msgstr "인증에 사용된 사용자의 SAML 암호입니다."
+
+#: src/metadata/conf.py:265
+msgid ""
+"Execute this script to produce the SAML password. This will be used when "
+"the plain password  is not set."
+msgstr ""
+"SAML 암호를 생성하려면 이 스크립트를 실행하십시오. 이 암호는 일반 암호가 "
+"설정되지 않은 경우에 사용됩니다."
+
+#: src/metadata/conf.py:272
+msgid ""
+"Navigator configuration directory, where navigator.client.properties is "
+"located."
+msgstr ""
+"Navigator 구성 디렉토리이며 navigator.client.properties가 위치하는 "
+"곳입니다."
+
+#: src/metadata/conf.py:283
+msgid "Max number of items to fetch in one call in object search."
+msgstr "개체 검색의 한 호출에서 가져올 최대 항목 수입니다."
+
+#: src/metadata/conf.py:289
+msgid "Max number of items to fetch in one call in object search autocomplete."
+msgstr "개체 검색 자동 완성의 한 호출에서 가져올 최대 항목 수입니다."
+
+#: src/metadata/conf.py:296
+msgid "Enable to search HDFS, S3 files."
+msgstr "HDFS, S3 파일 검색을 설정합니다."
+
+#: src/metadata/navigator_api.py:422 src/metadata/navigator_api.py:448
+msgid ""
+"add_tags requires an 'id' parameter and 'tags' parameter that is a non-"
+"empty list of tags"
+msgstr "add_tags에는 빈 태그 목록이 아닌 'id' 매개변수 및 'tags' 매개변수가 필요함"
+
+#: src/metadata/navigator_api.py:475
+msgid ""
+"update_properties requires an 'id' parameter and 'properties' or "
+"'metadata' parameters that are non-empty dicts"
+msgstr ""
+"update_properties에는 빈 사전이 아닌 'id' 매개 변수 및 'properties' 또는 "
+"'metadata' 매개 변수가 필요함"
+
+#: src/metadata/navigator_api.py:501
+msgid ""
+"update_properties requires an 'id' parameter and 'keys' parameter that is"
+" a non-empty list"
+msgstr "update_properties에는 빈 목록이 아닌 'id' 매개변수 및 'keys' 매개변수가 필요함"
+
+#: src/metadata/navigator_client.py:81 src/metadata/navigator_client.py:92
+#: src/metadata/navigator_client.py:103 src/metadata/optimizer_client.py:51
+msgid "No error message, please check the logs."
+msgstr "오류 메시지가 없습니다. 로그를 확인하십시오."
+
+#: src/metadata/navigator_client.py:225 src/metadata/navigator_client.py:300
+msgid "Failed to authenticate."
+msgstr "인증하지 못했습니다."
+
+#: src/metadata/optimizer_api.py:351
+msgid "Query history upload requires Admin privileges or feature is disabled."
+msgstr "쿼리 기록을 업로드하려면 관리자 권한이 있어야 합니다. 그렇지 않으면 기능이 해제됩니다."
+
+#: src/metadata/optimizer_api.py:376
+msgid "Skipped as task query"
+msgstr "작업 쿼리여서 건너뜀"
+
+#: src/metadata/optimizer_api.py:378
+msgid "Skipped"
+msgstr "건너뜀"
+
+#: src/metadata/optimizer_client.py:176
+msgid "Error while accessing Optimizer"
+msgstr "Optimizer에 액세스하는 중 오류 발생"
+
+#: src/metadata/optimizer_client.py:235
+msgid "Call not supported"
+msgstr "지원되지 않는 호출"
+
+#: src/metadata/optimizer_client.py:406
+#, python-format
+msgid "Could not get tenant id from cluster id %s: %s"
+msgstr "클러스터 ID %s에서 테넌트 ID를 가져올 수 없음: %s"
+
+#: src/metadata/workload_analytics_client.py:39
+msgid "Error accessing"
+msgstr "액세스 오류"

+ 329 - 0
desktop/libs/kafka/src/kafka/locale/pt/LC_MESSAGES/django.po

@@ -0,0 +1,329 @@
+# Portuguese translations for Hue.
+# Copyright (C) 2012 Cloudera
+# This file is distributed under the same license as the Hue project.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: VERSÃO DO PROJECTO\n"
+"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
+"POT-Creation-Date: 2015-12-22 08:50-0800\n"
+"PO-Revision-Date: 2012-07-30 18:50-0700\n"
+"Last-Translator: NOME COMPLETO <EMAIL@ADDRESS>\n"
+"Language-Team: pt <LL@li.org>\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 0.9.6\n"
+
+#: src/metadata/conf.py:40
+msgid "Configuration options for Navigator API"
+msgstr ""
+
+#: src/metadata/conf.py:44
+msgid "Base URL to Navigator API (e.g. - http://localhost:7187/api/v2)"
+msgstr ""
+
+#: src/metadata/conf.py:48
+msgid "Auth username of the hue user used for authentications."
+msgstr ""
+
+#: src/metadata/conf.py:53
+msgid "LDAP/PAM/.. password of the hue user used for authentications."
+msgstr ""
+
+#: src/metadata/conf.py:58
+msgid ""
+"Execute this script to produce the auth password. This will be used when "
+"`auth_password` is not set."
+msgstr ""
+
+#~ msgid "Notebook saved !"
+#~ msgstr "Ficheiro de projecto guardado!"
+
+#~ msgid "Notebook closed !"
+#~ msgstr "Ficheiro de projecto fechado!"
+
+#~ msgid "URL of the Spark Job Server."
+#~ msgstr "URL do servidor de trabalho Spark."
+
+#~ msgid "List of available types of snippets."
+#~ msgstr "Lista de tipos de fragmentos disponíveis."
+
+#~ msgid "The app won't work without a running Job Server"
+#~ msgstr "A aplicação não funciona sem um servidor Job em execução"
+
+#~ msgid "Example: 1 + 1, or press CTRL + space"
+#~ msgstr "Exemplo: 1 + 1 ou prima CTRL + espaço"
+
+#~ msgid "Example: SELECT * FROM tablename, or press CTRL + space"
+#~ msgstr "Exemplo: SELECT * FROM nome de tabela, ou prima CTRL + espaço"
+
+#~ msgid "<h2>This is a text snippet</h2>Type your text here"
+#~ msgstr "<h2>Isto é um fragmento de texto</h2>Escreva o seu texto aqui"
+
+#~ msgid "Query"
+#~ msgstr "Consultar"
+
+#~ msgid "Execute all snippets"
+#~ msgstr "Executar todos os fragmentos"
+
+#~ msgid "Clear all results"
+#~ msgstr "Eliminar todos os resultados"
+
+#~ msgid "Edit"
+#~ msgstr "Editar"
+
+#~ msgid "Save"
+#~ msgstr "Guardar"
+
+#~ msgid "Saving..."
+#~ msgstr "A guardar..."
+
+#~ msgid "Brand New"
+#~ msgstr "Completamente novo"
+
+#~ msgid "Notebooks"
+#~ msgstr "Ficheiros de projecto"
+
+#~ msgid "Add a new notebook"
+#~ msgstr "Adicionar um novo ficheiro de projecto"
+
+#~ msgid "Toggle Assist"
+#~ msgstr "Activar/desactivar assistente"
+
+#~ msgid "Data sample for"
+#~ msgstr "Amostra de dados para"
+
+#~ msgid "Ok"
+#~ msgstr "Ok"
+
+#~ msgid "Manually refresh the table list"
+#~ msgstr "Actualizar manualmente a lista da tabela"
+
+#~ msgid "database"
+#~ msgstr "base de dados"
+
+#~ msgid "Choose a database..."
+#~ msgstr "Seleccione uma base de dados..."
+
+#~ msgid "Table name..."
+#~ msgstr "Nome da tabela..."
+
+#~ msgid "The selected database has no tables."
+#~ msgstr "A base de dados seleccionada não tem tabelas."
+
+#~ msgid "The database list cannot be loaded."
+#~ msgstr "A lista da base de dados não pode ser carregada."
+
+#~ msgid "Add a snippet to start your new notebook"
+#~ msgstr ""
+#~ "Adicione um fragmento para começar a "
+#~ "utilizar o seu novo ficheiro de "
+#~ "projecto"
+
+#~ msgid "Add a new snippet"
+#~ msgstr "Adicionar um novo fragmento"
+
+#~ msgid "Text"
+#~ msgstr "Texto"
+
+#~ msgid "Creating session"
+#~ msgstr "A criar sessão"
+
+#~ msgid "CTRL + ENTER"
+#~ msgstr "CTRL + ENTER"
+
+#~ msgid "Cancel"
+#~ msgstr "Cancelar"
+
+#~ msgid "Grid"
+#~ msgstr "Grelha"
+
+#~ msgid "Bars"
+#~ msgstr "Barras"
+
+#~ msgid "Lines"
+#~ msgstr "Linhas"
+
+#~ msgid "Pie"
+#~ msgstr "Circular"
+
+#~ msgid "Scatter"
+#~ msgstr "Dispersão"
+
+#~ msgid "Marker Map"
+#~ msgstr "Marker Map"
+
+#~ msgid "Gradient Map"
+#~ msgstr "Gradient Map"
+
+#~ msgid "Show Logs"
+#~ msgstr "Mostrar registos"
+
+#~ msgid "Download first rows as CSV"
+#~ msgstr "Transferir filas iniciais como CSV"
+
+#~ msgid "CSV"
+#~ msgstr "CSV"
+
+#~ msgid "Download first rows as XLS"
+#~ msgstr "Transferir filas iniciais como XLS"
+
+#~ msgid "Excel"
+#~ msgstr "Excel"
+
+#~ msgid "Loading..."
+#~ msgstr "A carregar..."
+
+#~ msgid "Success."
+#~ msgstr "Sucesso."
+
+#~ msgid "Success but empty results."
+#~ msgstr "Operação realizada com sucesso mas sem resultados."
+
+#~ msgid "Hide columns"
+#~ msgstr "Ocultar colunas"
+
+#~ msgid "columns"
+#~ msgstr "colunas"
+
+#~ msgid "Show columns"
+#~ msgstr "Mostrar colunas"
+
+#~ msgid "Hide"
+#~ msgstr "Ocultar"
+
+#~ msgid "Hide settings"
+#~ msgstr "Ocultar definições"
+
+#~ msgid "x-axis"
+#~ msgstr "eixo X"
+
+#~ msgid "region"
+#~ msgstr "região"
+
+#~ msgid "latitude"
+#~ msgstr "latitude"
+
+#~ msgid "legend"
+#~ msgstr "legenda"
+
+#~ msgid "Choose a column..."
+#~ msgstr "Seleccione uma coluna..."
+
+#~ msgid "y-axis"
+#~ msgstr "eixo Y"
+
+#~ msgid "value"
+#~ msgstr "valor"
+
+#~ msgid "longitude"
+#~ msgstr "longitude"
+
+#~ msgid "label"
+#~ msgstr "etiqueta"
+
+#~ msgid "scatter group"
+#~ msgstr "grupo de dispersão"
+
+#~ msgid "scatter size"
+#~ msgstr "tamanho da dispersão"
+
+#~ msgid "sorting"
+#~ msgstr "a classificar"
+
+#~ msgid "No sorting"
+#~ msgstr "Sem classificação"
+
+#~ msgid "Sort ascending"
+#~ msgstr "Classificação ascendente"
+
+#~ msgid "Sort descending"
+#~ msgstr "Classificação descendente"
+
+#~ msgid "Show settings"
+#~ msgstr "Mostrar definições"
+
+#~ msgid "Paste or type a link"
+#~ msgstr "Colar ou escrever uma hiperligação"
+
+#~ msgid "Open in new window"
+#~ msgstr "Abrir numa nova janela"
+
+#~ msgid "No data available"
+#~ msgstr "Não existem dados disponíveis"
+
+#~ msgid "No matching records"
+#~ msgstr "Não existem registos correspondentes"
+
+#~ msgid "Distribution"
+#~ msgstr "Distribuição"
+
+#~ msgid "There was a problem loading the table preview."
+#~ msgstr "Ocorreu um problema ao carregar a pré-visualização da tabela."
+
+#~ msgid "Spark Editor"
+#~ msgstr "Editor Spark"
+
+#~ msgid "Search for name, description, etc..."
+#~ msgstr "Pesquisar por nome, descrição, etc..."
+
+#~ msgid "Submit"
+#~ msgstr "Enviar"
+
+#~ msgid "Share"
+#~ msgstr "Partilhar"
+
+#~ msgid "Copy"
+#~ msgstr "Copiar"
+
+#~ msgid "Delete"
+#~ msgstr "Eliminar"
+
+#~ msgid "Create"
+#~ msgstr "Criar"
+
+#~ msgid "Name"
+#~ msgstr "Nome"
+
+#~ msgid "Description"
+#~ msgstr "Descrição"
+
+#~ msgid "Owner"
+#~ msgstr "Proprietário"
+
+#~ msgid "Last Modified"
+#~ msgstr "Última modificação"
+
+#~ msgid "Delete the selected notebook(s)?"
+#~ msgstr "Eliminar o(s) ficheiro(s) de projecto seleccionado(s)?"
+
+#~ msgid "No"
+#~ msgstr "Não"
+
+#~ msgid "Yes"
+#~ msgstr "Sim"
+
+#~ msgid "Showing _START_ to _END_ of _TOTAL_ entries"
+#~ msgstr "A mostrar _START_ a _END_ de _TOTAL_ entradas"
+
+#~ msgid "Showing 0 to 0 of 0 entries"
+#~ msgstr "A mostrar 0 a 0 de 0 entradas"
+
+#~ msgid "(filtered from _MAX_ total entries)"
+#~ msgstr "(filtradas de um total de _MAX_ entradas)"
+
+#~ msgid "First"
+#~ msgstr "Primeiro"
+
+#~ msgid "Last"
+#~ msgstr "Último"
+
+#~ msgid "Next"
+#~ msgstr "Seguinte"
+
+#~ msgid "Previous"
+#~ msgstr "Anterior"
+

+ 326 - 0
desktop/libs/kafka/src/kafka/locale/pt_BR/LC_MESSAGES/django.po

@@ -0,0 +1,326 @@
+# Portuguese (Brazil) translations for Hue.
+# Copyright (C) 2012 Cloudera
+# This file is distributed under the same license as the Hue project.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: VERSÃO DO PROJETO\n"
+"Report-Msgid-Bugs-To: ENDEREÇO DE E-MAIL\n"
+"POT-Creation-Date: 2015-12-22 08:50-0800\n"
+"PO-Revision-Date: 2012-07-30 18:50-0700\n"
+"Last-Translator: NOME COMPLETO <ENDEREÇO DE E-MAIL>\n"
+"Language-Team: pt_BR <LL@li.org>\n"
+"Plural-Forms: nplurals=2; plural=(n > 1)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 0.9.6\n"
+
+#: src/metadata/conf.py:40
+msgid "Configuration options for Navigator API"
+msgstr ""
+
+#: src/metadata/conf.py:44
+msgid "Base URL to Navigator API (e.g. - http://localhost:7187/api/v2)"
+msgstr ""
+
+#: src/metadata/conf.py:48
+msgid "Auth username of the hue user used for authentications."
+msgstr ""
+
+#: src/metadata/conf.py:53
+msgid "LDAP/PAM/.. password of the hue user used for authentications."
+msgstr ""
+
+#: src/metadata/conf.py:58
+msgid ""
+"Execute this script to produce the auth password. This will be used when "
+"`auth_password` is not set."
+msgstr ""
+
+#~ msgid "Notebook saved !"
+#~ msgstr "Bloco de anotações salvo!"
+
+#~ msgid "Notebook closed !"
+#~ msgstr "Bloco de anotações fechado!"
+
+#~ msgid "URL of the Spark Job Server."
+#~ msgstr "URL do servidor de jobs Spark."
+
+#~ msgid "List of available types of snippets."
+#~ msgstr "Lista de tipos de snippets disponíveis."
+
+#~ msgid "The app won't work without a running Job Server"
+#~ msgstr "O aplicativo não funcionará sem um servidor Job em execução"
+
+#~ msgid "Example: 1 + 1, or press CTRL + space"
+#~ msgstr "Exemplo: 1 + 1, ou pressione CTRL + espaço"
+
+#~ msgid "Example: SELECT * FROM tablename, or press CTRL + space"
+#~ msgstr "Exemplo: SELECT * FROM tablename ou pressione CTRL + espaço"
+
+#~ msgid "<h2>This is a text snippet</h2>Type your text here"
+#~ msgstr "<h2>Isto é um snippet de texto</h2>Digite seu texto aqui"
+
+#~ msgid "Query"
+#~ msgstr "Consulta"
+
+#~ msgid "Execute all snippets"
+#~ msgstr "Executar todos os snippets"
+
+#~ msgid "Clear all results"
+#~ msgstr "Apagar todos os resultados"
+
+#~ msgid "Edit"
+#~ msgstr "Editar"
+
+#~ msgid "Save"
+#~ msgstr "Salvar"
+
+#~ msgid "Saving..."
+#~ msgstr "Salvando..."
+
+#~ msgid "Brand New"
+#~ msgstr "Novo"
+
+#~ msgid "Notebooks"
+#~ msgstr "Blocos de anotações"
+
+#~ msgid "Add a new notebook"
+#~ msgstr "Adicionar um novo bloco de anotações"
+
+#~ msgid "Toggle Assist"
+#~ msgstr "Ativar/desativar assistente"
+
+#~ msgid "Data sample for"
+#~ msgstr "Amostra de dados para"
+
+#~ msgid "Ok"
+#~ msgstr "Ok"
+
+#~ msgid "Manually refresh the table list"
+#~ msgstr "Atualizar manualmente a lista da tabela"
+
+#~ msgid "database"
+#~ msgstr "banco de dados"
+
+#~ msgid "Choose a database..."
+#~ msgstr "Escolha um banco de dados..."
+
+#~ msgid "Table name..."
+#~ msgstr "Nome da tabela..."
+
+#~ msgid "The selected database has no tables."
+#~ msgstr "O banco de dados selecionado não tem tabelas."
+
+#~ msgid "The database list cannot be loaded."
+#~ msgstr "Não é possível carregar a lista de banco de dados."
+
+#~ msgid "Add a snippet to start your new notebook"
+#~ msgstr "Adicionar snippet para iniciar seu bloco de anotações"
+
+#~ msgid "Add a new snippet"
+#~ msgstr "Adicionar um novo snippet"
+
+#~ msgid "Text"
+#~ msgstr "Texto"
+
+#~ msgid "Creating session"
+#~ msgstr "Criando sessão"
+
+#~ msgid "CTRL + ENTER"
+#~ msgstr "CTRL + ENTER"
+
+#~ msgid "Cancel"
+#~ msgstr "Cancelar"
+
+#~ msgid "Grid"
+#~ msgstr "Grade"
+
+#~ msgid "Bars"
+#~ msgstr "Barras"
+
+#~ msgid "Lines"
+#~ msgstr "Linhas"
+
+#~ msgid "Pie"
+#~ msgstr "Pizza"
+
+#~ msgid "Scatter"
+#~ msgstr "Dispersão"
+
+#~ msgid "Marker Map"
+#~ msgstr "Marker Map"
+
+#~ msgid "Gradient Map"
+#~ msgstr "Gradient Map"
+
+#~ msgid "Show Logs"
+#~ msgstr "Mostrar registros"
+
+#~ msgid "Download first rows as CSV"
+#~ msgstr "Baixar primeiras linhas como CSV"
+
+#~ msgid "CSV"
+#~ msgstr "CSV"
+
+#~ msgid "Download first rows as XLS"
+#~ msgstr "Baixar primeiras linhas como XLS"
+
+#~ msgid "Excel"
+#~ msgstr "Excel"
+
+#~ msgid "Loading..."
+#~ msgstr "Carregando..."
+
+#~ msgid "Success."
+#~ msgstr "Êxito."
+
+#~ msgid "Success but empty results."
+#~ msgstr "Êxito, mas com resultados em branco."
+
+#~ msgid "Hide columns"
+#~ msgstr "Ocultar colunas"
+
+#~ msgid "columns"
+#~ msgstr "colunas"
+
+#~ msgid "Show columns"
+#~ msgstr "Mostrar colunas"
+
+#~ msgid "Hide"
+#~ msgstr "Ocultar"
+
+#~ msgid "Hide settings"
+#~ msgstr "Ocultar configurações"
+
+#~ msgid "x-axis"
+#~ msgstr "eixo X"
+
+#~ msgid "region"
+#~ msgstr "região"
+
+#~ msgid "latitude"
+#~ msgstr "latitude"
+
+#~ msgid "legend"
+#~ msgstr "legenda"
+
+#~ msgid "Choose a column..."
+#~ msgstr "Escolha uma coluna..."
+
+#~ msgid "y-axis"
+#~ msgstr "eixo Y"
+
+#~ msgid "value"
+#~ msgstr "valor"
+
+#~ msgid "longitude"
+#~ msgstr "longitude"
+
+#~ msgid "label"
+#~ msgstr "rótulo"
+
+#~ msgid "scatter group"
+#~ msgstr "grupo de dispersão"
+
+#~ msgid "scatter size"
+#~ msgstr "tamanho da dispersão"
+
+#~ msgid "sorting"
+#~ msgstr "classificação"
+
+#~ msgid "No sorting"
+#~ msgstr "Sem classificação"
+
+#~ msgid "Sort ascending"
+#~ msgstr "Classificar em ordem crescente"
+
+#~ msgid "Sort descending"
+#~ msgstr "Classificar em ordem decrescente"
+
+#~ msgid "Show settings"
+#~ msgstr "Mostrar configurações"
+
+#~ msgid "Paste or type a link"
+#~ msgstr "Cole ou digite um link"
+
+#~ msgid "Open in new window"
+#~ msgstr "Abrir em nova janela"
+
+#~ msgid "No data available"
+#~ msgstr "Nenhum dado disponível"
+
+#~ msgid "No matching records"
+#~ msgstr "Nenhum registro correspondente"
+
+#~ msgid "Distribution"
+#~ msgstr "Distribuição"
+
+#~ msgid "There was a problem loading the table preview."
+#~ msgstr "Houve um problema ao carregar a visualização da tabela."
+
+#~ msgid "Spark Editor"
+#~ msgstr "Editor Spark"
+
+#~ msgid "Search for name, description, etc..."
+#~ msgstr "Pesquisar nome, descrição etc..."
+
+#~ msgid "Submit"
+#~ msgstr "Enviar"
+
+#~ msgid "Share"
+#~ msgstr "Compartilhar"
+
+#~ msgid "Copy"
+#~ msgstr "Copiar"
+
+#~ msgid "Delete"
+#~ msgstr "Excluir"
+
+#~ msgid "Create"
+#~ msgstr "Criar"
+
+#~ msgid "Name"
+#~ msgstr "Nome"
+
+#~ msgid "Description"
+#~ msgstr "Descrição"
+
+#~ msgid "Owner"
+#~ msgstr "Proprietário"
+
+#~ msgid "Last Modified"
+#~ msgstr "Última modificação"
+
+#~ msgid "Delete the selected notebook(s)?"
+#~ msgstr "Excluir os blocos de anotações selecionados?"
+
+#~ msgid "No"
+#~ msgstr "Não"
+
+#~ msgid "Yes"
+#~ msgstr "Sim"
+
+#~ msgid "Showing _START_ to _END_ of _TOTAL_ entries"
+#~ msgstr "Exibindo _START_ ao _END_ do _TOTAL_ de entradas"
+
+#~ msgid "Showing 0 to 0 of 0 entries"
+#~ msgstr "Exibindo 0 a 0 de 0 entradas"
+
+#~ msgid "(filtered from _MAX_ total entries)"
+#~ msgstr "(filtrado de um total de _MAX_ entradas)"
+
+#~ msgid "First"
+#~ msgstr "Primeiro"
+
+#~ msgid "Last"
+#~ msgstr "Último"
+
+#~ msgid "Next"
+#~ msgstr "Próximo"
+
+#~ msgid "Previous"
+#~ msgstr "Anterior"
+

+ 246 - 0
desktop/libs/kafka/src/kafka/locale/zh_CN/LC_MESSAGES/django.po

@@ -0,0 +1,246 @@
+# Chinese (China) translations for Hue.
+# Copyright (C) 2013 Cloudera, Inc
+# This file is distributed under the same license as the Hue project.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Hue VERSION\n"
+"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
+"POT-Creation-Date: 2018-03-07 10:04-0800\n"
+"PO-Revision-Date: 2013-10-28 10:31-0700\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: zh_CN <LL@li.org>\n"
+"Plural-Forms: nplurals=1; plural=0\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 0.9.6\n"
+
+#: src/metadata/conf.py:88
+msgid "Configuration options for Optimizer API"
+msgstr "优化器 API 的配置选项"
+
+#: src/metadata/conf.py:92
+msgid "Hostname to Optimizer API or compatible service."
+msgstr "优化器 API 或兼容服务的主机名。"
+
+#: src/metadata/conf.py:97
+msgid "The name of the key of the service."
+msgstr "服务的密钥名称。"
+
+#: src/metadata/conf.py:102
+msgid "The private part of the key associated with the auth_key."
+msgstr "与 auth_key 关联的密钥的私钥部分。"
+
+#: src/metadata/conf.py:107
+msgid ""
+"Execute this script to produce the auth_key secret. This will be used "
+"when `auth_key_secret` is not set."
+msgstr ""
+"执行此脚本以生成 auth_key 密钥。如果未设置“auth_key_secret”,"
+"则会使用此密钥。"
+
+#: src/metadata/conf.py:113
+msgid ""
+"The name of the workload where queries are uploaded and optimizations are"
+" calculated from. Automatically guessed from auth_key and cluster_id if "
+"not specified."
+msgstr ""
+"用于上传查询和计算优化的工作负载名称。"
+"如果未指定,"
+"则根据 auth_key 和 cluster_id 自动猜测。"
+
+#: src/metadata/conf.py:118
+msgid ""
+"The name of the cluster used to determine the tenant id when this one is "
+"not specified. Defaults to the cluster Id or 'default'."
+msgstr ""
+"如果未指定租户 ID,则为用于确定租户 ID 的群集名称。"
+"默认为群集 ID 或“default”。"
+
+#: src/metadata/conf.py:124 src/metadata/conf.py:277
+msgid ""
+"Perform Sentry privilege filtering. Default to true automatically if the "
+"cluster is secure."
+msgstr ""
+"执行 Sentry 权限筛选。如果"
+"群集是安全的,则自动默认为 true。"
+
+#: src/metadata/conf.py:131
+msgid ""
+"The cache TTL in milliseconds for the assist/autocomplete/etc calls. Set "
+"to 0 to disable the cache."
+msgstr ""
+"用于 assist/autocomplete/ 等调用的缓存 TTL(以毫秒为单位)。设置为 "
+"0 将禁用缓存。"
+
+#: src/metadata/conf.py:135
+msgid ""
+"Automatically upload queries after their execution in order to improve "
+"recommendations."
+msgstr ""
+"执行后自动上传查询"
+"以改进建议。"
+
+#: src/metadata/conf.py:141
+msgid ""
+"Automatically upload queried tables DDL in order to improve "
+"recommendations."
+msgstr ""
+"自动上传查询到的表 DDL"
+"以改进建议。"
+
+#: src/metadata/conf.py:147
+msgid ""
+"Automatically upload queried tables and columns stats in order to improve"
+" recommendations."
+msgstr ""
+"自动上传查询到的表和列统计数据"
+"以改进建议。"
+
+#: src/metadata/conf.py:153
+msgid ""
+"Allow admins to upload the last N executed queries in the quick start "
+"wizard. Use 0 to disable."
+msgstr ""
+"允许管理员在快速启动向导中上传已执行的 N 个查询。"
+"使用 0 可禁用。"
+
+#: src/metadata/conf.py:211
+msgid "Configuration options for Navigator API"
+msgstr "Navigator API 的配置选项"
+
+#: src/metadata/conf.py:215
+msgid "Base URL to Navigator API."
+msgstr "Navigator API 的基本 URL。"
+
+#: src/metadata/conf.py:219
+msgid "Which authentication to use: CM or external via LDAP or SAML."
+msgstr "要使用哪种身份验证方法:CM 还是通过 LDAP 或 SAML 进行外部身份验证。"
+
+#: src/metadata/conf.py:224
+msgid "Username of the CM user used for authentication."
+msgstr "用于身份验证的 CM 用户的用户名。"
+
+#: src/metadata/conf.py:228
+msgid "CM password of the user used for authentication."
+msgstr "用于身份验证的用户的 CM 密码。"
+
+#: src/metadata/conf.py:233
+msgid ""
+"Execute this script to produce the CM password. This will be used when "
+"the plain password is not set."
+msgstr ""
+"执行此脚本以生成 CM 密码。如果未设置明文密码,"
+"则会使用此密码。"
+
+#: src/metadata/conf.py:240
+msgid "Username of the LDAP user used for authentication."
+msgstr "用于身份验证的 LDAP 用户的用户名。"
+
+#: src/metadata/conf.py:244
+msgid "LDAP password of the user used for authentication."
+msgstr "用于身份验证的用户的 LDAP 密码。"
+
+#: src/metadata/conf.py:249
+msgid ""
+"Execute this script to produce the LDAP password. This will be used when "
+"the plain password is not set."
+msgstr ""
+"执行此脚本以生成 LDAP 密码。如果未设置明文密码,"
+"则会使用此密码。"
+
+#: src/metadata/conf.py:256
+msgid "Username of the SAML user used for authentication."
+msgstr "用于身份验证的 SAML 用户的用户名。"
+
+#: src/metadata/conf.py:260
+msgid "SAML password of the user used for authentication."
+msgstr "用于身份验证的用户的 SAML 密码。"
+
+#: src/metadata/conf.py:265
+msgid ""
+"Execute this script to produce the SAML password. This will be used when "
+"the plain password  is not set."
+msgstr ""
+"执行此脚本以生成 SAML 密码。如果未设置明文密码,"
+"则会使用此密码。"
+
+#: src/metadata/conf.py:272
+msgid ""
+"Navigator configuration directory, where navigator.client.properties is "
+"located."
+msgstr ""
+"navigator.client.properties 所在的 Navigator "
+"配置目录。"
+
+#: src/metadata/conf.py:283
+msgid "Max number of items to fetch in one call in object search."
+msgstr "在对象搜索中一次调用可获取的最大项数。"
+
+#: src/metadata/conf.py:289
+msgid "Max number of items to fetch in one call in object search autocomplete."
+msgstr "在对象搜索自动完成中一次调用可获取的最大项数。"
+
+#: src/metadata/conf.py:296
+msgid "Enable to search HDFS, S3 files."
+msgstr "启用以搜索 HDFS、S3 文件。"
+
+#: src/metadata/navigator_api.py:422 src/metadata/navigator_api.py:448
+msgid ""
+"add_tags requires an 'id' parameter and 'tags' parameter that is a non-"
+"empty list of tags"
+msgstr "add_tags 需要一个 'id' 参数和 'tags' 参数,即,标记的非空列表"
+
+#: src/metadata/navigator_api.py:475
+msgid ""
+"update_properties requires an 'id' parameter and 'properties' or "
+"'metadata' parameters that are non-empty dicts"
+msgstr ""
+"update_properties 需要“id”参数以及“properties”或"
+"“metadata”参数,并且这些参数为非空目录"
+
+#: src/metadata/navigator_api.py:501
+msgid ""
+"update_properties requires an 'id' parameter and 'keys' parameter that is"
+" a non-empty list"
+msgstr "update_properties 需要一个 'id' 参数和 'keys' 参数,即,非空列表"
+
+#: src/metadata/navigator_client.py:81 src/metadata/navigator_client.py:92
+#: src/metadata/navigator_client.py:103 src/metadata/optimizer_client.py:51
+msgid "No error message, please check the logs."
+msgstr "无错误消息,请检查日志。"
+
+#: src/metadata/navigator_client.py:225 src/metadata/navigator_client.py:300
+msgid "Failed to authenticate."
+msgstr "身份验证失败。"
+
+#: src/metadata/optimizer_api.py:351
+msgid "Query history upload requires Admin privileges or feature is disabled."
+msgstr "查询历史记录上传需要管理员权限或此功能处于禁用状态。"
+
+#: src/metadata/optimizer_api.py:376
+msgid "Skipped as task query"
+msgstr "已作为任务查询跳过"
+
+#: src/metadata/optimizer_api.py:378
+msgid "Skipped"
+msgstr "已跳过"
+
+#: src/metadata/optimizer_client.py:176
+msgid "Error while accessing Optimizer"
+msgstr "访问优化器时出错"
+
+#: src/metadata/optimizer_client.py:235
+msgid "Call not supported"
+msgstr "不支持调用"
+
+#: src/metadata/optimizer_client.py:406
+#, python-format
+msgid "Could not get tenant id from cluster id %s: %s"
+msgstr "无法从集群 ID %s 获取租户 ID:%s"
+
+#: src/metadata/workload_analytics_client.py:39
+msgid "Error accessing"
+msgstr "访问时出错"

+ 22 - 0
desktop/libs/kafka/src/kafka/settings.py

@@ -0,0 +1,22 @@
+#!/usr/bin/env python
+# Licensed to Cloudera, Inc. under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  Cloudera, Inc. licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+DJANGO_APPS = ["kafka"]
+NICE_NAME = "Kafka"
+REQUIRES_HADOOP = False
+MENU_INDEX = -1
+IS_URL_NAMESPACED = True

+ 24 - 0
desktop/libs/kafka/src/kafka/urls.py

@@ -0,0 +1,24 @@
+#!/usr/bin/env python
+# Licensed to Cloudera, Inc. under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  Cloudera, Inc. licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+from django.conf.urls import patterns, url
+
+
+urlpatterns = patterns('kafka.kafka_api',
+  url(r'^api/topics/list/$', 'list_topics', name='list_topics'),
+  url(r'^api/topic/list/$', 'list_topic', name='list_topic'),
+)

+ 2 - 104
desktop/libs/metadata/src/metadata/conf.py

@@ -65,13 +65,6 @@ def has_navigator(user):
       and (user.is_superuser or user.has_hue_permission(action="access", app=DJANGO_APPS[0]))
       and (user.is_superuser or user.has_hue_permission(action="access", app=DJANGO_APPS[0]))
 
 
 
 
-def has_kafka():
-  return KAFKA.IS_ENABLED.get()
-
-def has_kafka_api():
-  return bool(KAFKA.API_URL.get())
-
-
 def get_security_default():
 def get_security_default():
   '''Get default security value from Hadoop'''
   '''Get default security value from Hadoop'''
   from hadoop import cluster # Avoid dependencies conflicts
   from hadoop import cluster # Avoid dependencies conflicts
@@ -316,104 +309,9 @@ MANAGER = ConfigSection(
       key='api_url',
       key='api_url',
       help=_t('Base URL to API.'),
       help=_t('Base URL to API.'),
       default=None),
       default=None),
- 
-    AUTH_CM_USERNAME=Config(
-      key="navmetadataserver_cmdb_user",
-      help=_t("Username of the CM user used for authentication."),
-      dynamic_default=get_auth_username),
-    AUTH_CM_PASSWORD=Config(
-      key="navmetadataserver_cmdb_password",
-      help=_t("CM password of the user used for authentication."),
-      private=True,
-      dynamic_default=get_navigator_cm_password),
-    AUTH_CM_PASSWORD_SCRIPT=Config(
-      key="navmetadataserver_cmdb_password_script",
-      help=_t("Execute this script to produce the CM password. This will be used when the plain password is not set."),
-      private=True,
-      type=coerce_password_from_script,
-      default=None),
-
-    AUTH_LDAP_USERNAME=Config(
-      key="navmetadataserver_ldap_user",
-      help=_t("Username of the LDAP user used for authentication."),
-      dynamic_default=get_auth_username),
-    AUTH_LDAP_PASSWORD=Config(
-      key="navmetadataserver_ldap_password",
-      help=_t("LDAP password of the user used for authentication."),
-      private=True,
-      dynamic_default=get_navigator_ldap_password),
-    AUTH_LDAP_PASSWORD_SCRIPT=Config(
-      key="navmetadataserver_ldap_password_script",
-      help=_t("Execute this script to produce the LDAP password. This will be used when the plain password is not set."),
-      private=True,
-      type=coerce_password_from_script,
-      default=None),
-
-    AUTH_SAML_USERNAME=Config(
-      key="navmetadataserver_saml_user",
-      help=_t("Username of the SAML user used for authentication."),
-      dynamic_default=get_auth_username),
-    AUTH_SAML_PASSWORD=Config(
-      key="navmetadataserver_saml_password",
-      help=_t("SAML password of the user used for authentication."),
-      private=True,
-      dynamic_default=get_navigator_saml_password),
-    AUTH_SAML_PASSWORD_SCRIPT=Config(
-      key="navmetadataserver_saml_password_script",
-      help=_t("Execute this script to produce the SAML password. This will be used when the plain password  is not set."),
-      private=True,
-      type=coerce_password_from_script,
-      default=None),
-
-    CONF_DIR = Config(
-      key='conf_dir',
-      help=_t('Navigator configuration directory, where navigator.client.properties is located.'),
-      dynamic_default=default_navigator_config_dir
-    ),
-    APPLY_SENTRY_PERMISSIONS = Config(
-      key="apply_sentry_permissions",
-      help=_t("Perform Sentry privilege filtering. Default to true automatically if the cluster is secure."),
-      dynamic_default=get_security_default,
-      type=coerce_bool
-    ),
-    FETCH_SIZE_SEARCH = Config(
-      key="fetch_size_search",
-      help=_t("Max number of items to fetch in one call in object search."),
-      default=450,
-      type=int
-    ),
-    FETCH_SIZE_SEARCH_INTERACTIVE = Config(
-      key="fetch_size_search_interactive",
-      help=_t("Max number of items to fetch in one call in object search autocomplete."),
-      default=450,
-      type=int
-    ),
-
-    ENABLE_FILE_SEARCH = Config(
-      key="enable_file_search",
-      help=_t("Enable to search HDFS, S3 files."),
-      type=coerce_bool,
-      default=False
-    )
-  )
-)
-
-
-KAFKA = ConfigSection(
-  key='kafka',
-  help=_t("""Configuration options for Kafka management"""),
-  members=dict(
-    IS_ENABLED = Config(
-      key="is_enabled",
-      help=_t("Enable the Kafka integration."),
-      type=coerce_bool,
-      default=False
-    ),
-    API_URL=Config(
-      key='api_url',
-      help=_t('Base URL of Kafka REST API.'),
-      default=None),
   )
   )
+  # username comes from get_navigator_auth_username()
+  # password comes from get_navigator_auth_password()
 )
 )
 
 
 
 

+ 6 - 5
desktop/libs/metadata/src/metadata/manager_client.py

@@ -24,7 +24,8 @@ from django.utils.translation import ugettext as _
 from desktop.lib.rest.http_client import RestException, HttpClient
 from desktop.lib.rest.http_client import RestException, HttpClient
 from desktop.lib.rest.resource import Resource
 from desktop.lib.rest.resource import Resource
 from desktop.lib.i18n import smart_unicode
 from desktop.lib.i18n import smart_unicode
-from metadata.conf import MANAGER
+
+from metadata.conf import MANAGER, get_navigator_auth_username, get_navigator_auth_password
 
 
 
 
 LOG = logging.getLogger(__name__)
 LOG = logging.getLogger(__name__)
@@ -49,8 +50,8 @@ class ManagerApi(object):
 
 
   def __init__(self, user=None, security_enabled=False, ssl_cert_ca_verify=False):
   def __init__(self, user=None, security_enabled=False, ssl_cert_ca_verify=False):
     self._api_url = '%s/%s' % (MANAGER.API_URL.get().strip('/'), VERSION)
     self._api_url = '%s/%s' % (MANAGER.API_URL.get().strip('/'), VERSION)
-    self._username = 'hue' #get_navigator_auth_username()
-    self._password = 'hue' #get_navigator_auth_password()
+    self._username = get_navigator_auth_username()
+    self._password = get_navigator_auth_password()
 
 
     self.user = user
     self.user = user
     self._client = HttpClient(self._api_url, logger=LOG)
     self._client = HttpClient(self._api_url, logger=LOG)
@@ -112,11 +113,11 @@ class ManagerApi(object):
     try:
     try:
       client = HttpClient('http://%s:24042' % broker_host, logger=LOG)
       client = HttpClient('http://%s:24042' % broker_host, logger=LOG)
       root = Resource(client)
       root = Resource(client)
-      
+
       return root.get('/api/topics')
       return root.get('/api/topics')
     except RestException, e:
     except RestException, e:
       raise ManagerApiException(e)
       raise ManagerApiException(e)
-    
+
 
 
   def _get_services(self, cluster_name=None):
   def _get_services(self, cluster_name=None):
     clusters = self._root.get('clusters/')['items']
     clusters = self._root.get('clusters/')['items']

+ 0 - 6
desktop/libs/metadata/src/metadata/urls.py

@@ -69,12 +69,6 @@ urlpatterns += patterns('metadata.manager_api',
   url(r'^api/manager/hello/?$', 'hello', name='hello'),
   url(r'^api/manager/hello/?$', 'hello', name='hello'),
 )
 )
 
 
-# Kafka API
-urlpatterns += patterns('metadata.kafka_api',
-  url(r'^api/topics/list/$', 'list_topics', name='list_topics'),
-  url(r'^api/topic/list/$', 'list_topic', name='list_topic'),
-)
-
 # Workload Analytics API
 # Workload Analytics API
 urlpatterns += patterns('metadata.workload_analytics_api',
 urlpatterns += patterns('metadata.workload_analytics_api',
   url(r'^api/workload_analytics/get_operation_execution_details/?$', 'get_operation_execution_details', name='get_operation_execution_details'),
   url(r'^api/workload_analytics/get_operation_execution_details/?$', 'get_operation_execution_details', name='get_operation_execution_details'),