README.md edited

This commit is contained in:
2024-12-06 10:45:08 +09:00
parent 09e4edee6b
commit 1aa387aa59
13921 changed files with 2057290 additions and 10 deletions

View File

@@ -0,0 +1 @@
VERSION = '1.0.8'

View File

@@ -0,0 +1,5 @@
from django.contrib import admin
class CompactInline(admin.options.InlineModelAdmin):
template = 'admin/edit_inline/compact.html'

View File

@@ -0,0 +1,317 @@
from importlib import import_module
try:
from django.core.urlresolvers import reverse
except ImportError: # Django 1.11
from django.urls import reverse
from django.template.loader import render_to_string
from jet.dashboard import modules
from jet.dashboard.models import UserDashboardModule
from django.utils.translation import ugettext_lazy as _
from jet.ordered_set import OrderedSet
from jet.utils import get_admin_site_name, context_to_dict
try:
from django.template.context_processors import csrf
except ImportError:
from django.core.context_processors import csrf
class Dashboard(object):
"""
Base dashboard class. All custom dashboards should inherit it.
"""
#: Number of columns in which widgets can be placed
columns = 2
#: Dashboard Modules (widgets) that dashboard is filled with, when the user open it for the first time
#:
#: List of dashboard module **instances**
children = None
#: Dashboard Modules (widgets) that user can add to dashboard at any time
# (not created when the user open dashboard for the first time)
#:
#: List of dashboard module **classes**
available_children = None
app_label = None
context = None
modules = None
class Media:
css = ()
js = ()
def __init__(self, context, **kwargs):
for key in kwargs:
if hasattr(self.__class__, key):
setattr(self, key, kwargs[key])
self.children = self.children or []
self.available_children = self.available_children or []
self.set_context(context)
def set_context(self, context):
self.context = context
self.init_with_context(context)
self.load_modules()
def init_with_context(self, context):
"""
Override this method to fill your custom **Dashboard** class with widgets.
You should add your widgets to ``children`` and ``available_children`` attributes.
Usage example:
.. code-block:: python
from django.utils.translation import ugettext_lazy as _
from jet.dashboard import modules
from jet.dashboard.dashboard import Dashboard, AppIndexDashboard
class CustomIndexDashboard(Dashboard):
columns = 3
def init_with_context(self, context):
self.available_children.append(modules.LinkList)
self.children.append(modules.LinkList(
_('Support'),
children=[
{
'title': _('Django documentation'),
'url': 'http://docs.djangoproject.com/',
'external': True,
},
{
'title': _('Django "django-users" mailing list'),
'url': 'http://groups.google.com/group/django-users',
'external': True,
},
{
'title': _('Django irc channel'),
'url': 'irc://irc.freenode.net/django',
'external': True,
},
],
column=0,
order=0
))
"""
pass
def load_module(self, module_fullname):
package, module_name = module_fullname.rsplit('.', 1)
package = import_module(package)
module = getattr(package, module_name)
return module
def create_initial_module_models(self, user):
module_models = []
i = 0
for module in self.children:
column = module.column if module.column is not None else i % self.columns
order = module.order if module.order is not None else int(i / self.columns)
module_models.append(UserDashboardModule.objects.create(
title=module.title,
app_label=self.app_label,
user=user.pk,
module=module.fullname(),
column=column,
order=order,
settings=module.dump_settings(),
children=module.dump_children()
))
i += 1
return module_models
def load_modules(self):
module_models = UserDashboardModule.objects.filter(
app_label=self.app_label,
user=self.context['request'].user.pk
).all()
if len(module_models) == 0:
module_models = self.create_initial_module_models(self.context['request'].user)
loaded_modules = []
for module_model in module_models:
module_cls = module_model.load_module()
if module_cls is not None:
module = module_cls(model=module_model, context=self.context)
loaded_modules.append(module)
self.modules = loaded_modules
def render(self):
context = context_to_dict(self.context)
context.update({
'columns': range(self.columns),
'modules': self.modules,
'app_label': self.app_label,
})
context.update(csrf(context['request']))
return render_to_string('jet.dashboard/dashboard.html', context)
def render_tools(self):
context = context_to_dict(self.context)
context.update({
'children': self.children,
'app_label': self.app_label,
'available_children': self.available_children
})
context.update(csrf(context['request']))
return render_to_string('jet.dashboard/dashboard_tools.html', context)
def media(self):
unique_css = OrderedSet()
unique_js = OrderedSet()
for js in getattr(self.Media, 'js', ()):
unique_js.add(js)
for css in getattr(self.Media, 'css', ()):
unique_css.add(css)
for module in self.modules:
for js in getattr(module.Media, 'js', ()):
unique_js.add(js)
for css in getattr(module.Media, 'css', ()):
unique_css.add(css)
class Media:
css = list(unique_css)
js = list(unique_js)
return Media
class AppIndexDashboard(Dashboard):
def get_app_content_types(self):
return self.app_label + '.*',
def models(self):
return self.app_label + '.*',
class DefaultIndexDashboard(Dashboard):
columns = 3
def init_with_context(self, context):
self.available_children.append(modules.LinkList)
self.available_children.append(modules.Feed)
site_name = get_admin_site_name(context)
# append a link list module for "quick links"
self.children.append(modules.LinkList(
_('Quick links'),
layout='inline',
draggable=False,
deletable=False,
collapsible=False,
children=[
[_('Return to site'), '/'],
[_('Change password'),
reverse('%s:password_change' % site_name)],
[_('Log out'), reverse('%s:logout' % site_name)],
],
column=0,
order=0
))
# append an app list module for "Applications"
self.children.append(modules.AppList(
_('Applications'),
exclude=('auth.*',),
column=1,
order=0
))
# append an app list module for "Administration"
self.children.append(modules.AppList(
_('Administration'),
models=('auth.*',),
column=2,
order=0
))
# append a recent actions module
self.children.append(modules.RecentActions(
_('Recent Actions'),
10,
column=0,
order=1
))
# append a feed module
self.children.append(modules.Feed(
_('Latest Django News'),
feed_url='http://www.djangoproject.com/rss/weblog/',
limit=5,
column=1,
order=1
))
# append another link list module for "support".
self.children.append(modules.LinkList(
_('Support'),
children=[
{
'title': _('Django documentation'),
'url': 'http://docs.djangoproject.com/',
'external': True,
},
{
'title': _('Django "django-users" mailing list'),
'url': 'http://groups.google.com/group/django-users',
'external': True,
},
{
'title': _('Django irc channel'),
'url': 'irc://irc.freenode.net/django',
'external': True,
},
],
column=2,
order=1
))
class DefaultAppIndexDashboard(AppIndexDashboard):
def init_with_context(self, context):
self.available_children.append(modules.LinkList)
self.children.append(modules.ModelList(
title=_('Application models'),
models=self.models(),
column=0,
order=0
))
self.children.append(modules.RecentActions(
include_list=self.get_app_content_types(),
column=1,
order=0
))
class DashboardUrls(object):
_urls = []
def get_urls(self):
return self._urls
def register_url(self, url):
self._urls.append(url)
def register_urls(self, urls):
self._urls.extend(urls)
urls = DashboardUrls()

View File

@@ -0,0 +1,444 @@
# encoding: utf-8
import datetime
import json
from django import forms
try:
from django.core.urlresolvers import reverse
except ImportError: # Django 1.11
from django.urls import reverse
from django.forms import Widget
from django.utils import formats
from django.utils.html import format_html
from django.utils.safestring import mark_safe
from django.utils.text import capfirst
from googleapiclient.discovery import build
import httplib2
from jet.dashboard.modules import DashboardModule
from oauth2client.client import flow_from_clientsecrets, OAuth2Credentials, AccessTokenRefreshError, Storage
from django.utils.translation import ugettext_lazy as _
from django.conf import settings
from django.utils.encoding import force_text
try:
from django.utils.encoding import force_unicode
except ImportError:
from django.utils.encoding import force_text as force_unicode
try:
from django.forms.utils import flatatt
except ImportError:
from django.forms.util import flatatt
JET_MODULE_GOOGLE_ANALYTICS_CLIENT_SECRETS_FILE = getattr(
settings,
'JET_MODULE_GOOGLE_ANALYTICS_CLIENT_SECRETS_FILE',
''
)
class ModuleCredentialStorage(Storage):
def __init__(self, module):
super(ModuleCredentialStorage, self).__init__()
self.module = module
def locked_get(self):
pass
def locked_put(self, credentials):
pass
def locked_delete(self):
pass
def get(self):
try:
settings = json.loads(self.module.settings)
credential = settings['credential']
return OAuth2Credentials.from_json(credential)
except (ValueError, KeyError):
return None
def put(self, credentials):
self.module.update_settings({'credential': credentials.to_json()})
def delete(self):
self.module.pop_settings(('credential',))
class GoogleAnalyticsClient:
credential = None
analytics_service = None
def __init__(self, storage=None, redirect_uri=None):
self.FLOW = flow_from_clientsecrets(
JET_MODULE_GOOGLE_ANALYTICS_CLIENT_SECRETS_FILE,
scope='https://www.googleapis.com/auth/analytics.readonly',
redirect_uri=redirect_uri,
prompt='consent'
)
if storage is not None:
credential = storage.get()
credential.set_store(storage)
self.set_credential(credential)
def get_oauth_authorize_url(self, state=''):
self.FLOW.params['state'] = state
authorize_url = self.FLOW.step1_get_authorize_url()
return authorize_url
def set_credential(self, credential):
self.credential = credential
self.set_analytics_service(self.credential)
def set_credential_from_request(self, request):
self.set_credential(self.FLOW.step2_exchange(request.GET))
def set_analytics_service(self, credential):
http = httplib2.Http()
http = credential.authorize(http)
self.analytics_service = build('analytics', 'v3', http=http)
def api_profiles(self):
if self.analytics_service is None:
return None, None
try:
profiles = self.analytics_service.management().profiles().list(
accountId='~all',
webPropertyId='~all'
).execute()
return profiles['items'], None
except (TypeError, KeyError) as e:
return None, e
def api_ga(self, profile_id, date1, date2, group=None):
if self.analytics_service is None:
return None, None
if group == 'day':
dimensions = 'ga:date'
elif group == 'week':
dimensions = 'ga:year,ga:week'
elif group == 'month':
dimensions = 'ga:year,ga:month'
else:
dimensions = ''
try:
data = self.analytics_service.data().ga().get(
ids='ga:' + profile_id,
start_date=date1.strftime('%Y-%m-%d'),
end_date=date2.strftime('%Y-%m-%d'),
metrics='ga:users,ga:sessions,ga:pageviews',
dimensions=dimensions
).execute()
return data, None
except TypeError as e:
return None, e
class CredentialWidget(Widget):
module = None
def render(self, name, value, attrs=None):
if value and len(value) > 0:
link = '<a href="%s">%s</a>' % (
reverse('jet-dashboard:google-analytics-revoke', kwargs={'pk': self.module.model.pk}),
force_text(_('Revoke access'))
)
else:
link = '<a href="%s">%s</a>' % (
reverse('jet-dashboard:google-analytics-grant', kwargs={'pk': self.module.model.pk}),
force_text(_('Grant access'))
)
attrs = self.build_attrs({
'type': 'hidden',
'name': 'credential',
})
attrs['value'] = force_unicode(value) if value else ''
return format_html('%s<input{} />' % link, flatatt(attrs))
class GoogleAnalyticsSettingsForm(forms.Form):
credential = forms.CharField(label=_('Access'), widget=CredentialWidget)
counter = forms.ChoiceField(label=_('Counter'))
period = forms.ChoiceField(label=_('Statistics period'), choices=(
(0, _('Today')),
(6, _('Last week')),
(30, _('Last month')),
(31 * 3 - 1, _('Last quarter')),
(364, _('Last year')),
))
def set_module(self, module):
self.fields['credential'].widget.module = module
self.set_counter_choices(module)
def set_counter_choices(self, module):
counters = module.counters()
if counters is not None:
self.fields['counter'].choices = (('', '-- %s --' % force_text(_('none'))),)
self.fields['counter'].choices.extend(map(lambda x: (x['id'], x['websiteUrl']), counters))
else:
label = force_text(_('grant access first')) if module.credential is None else force_text(_('counters loading failed'))
self.fields['counter'].choices = (('', '-- %s -- ' % label),)
class GoogleAnalyticsChartSettingsForm(GoogleAnalyticsSettingsForm):
show = forms.ChoiceField(label=_('Show'), choices=(
('ga:users', capfirst(_('users'))),
('ga:sessions', capfirst(_('sessions'))),
('ga:pageviews', capfirst(_('views'))),
))
group = forms.ChoiceField(label=_('Group'), choices=(
('day', _('By day')),
('week', _('By week')),
('month', _('By month')),
))
class GoogleAnalyticsPeriodVisitorsSettingsForm(GoogleAnalyticsSettingsForm):
group = forms.ChoiceField(label=_('Group'), choices=(
('day', _('By day')),
('week', _('By week')),
('month', _('By month')),
))
class GoogleAnalyticsBase(DashboardModule):
settings_form = GoogleAnalyticsSettingsForm
ajax_load = True
contrast = True
period = None
credential = None
counter = None
error = None
storage = None
def __init__(self, title=None, period=None, **kwargs):
kwargs.update({'period': period})
super(GoogleAnalyticsBase, self).__init__(title, **kwargs)
def settings_dict(self):
return {
'period': self.period,
'credential': self.credential,
'counter': self.counter
}
def load_settings(self, settings):
try:
self.period = int(settings.get('period'))
except TypeError:
self.period = 0
self.credential = settings.get('credential')
self.storage = ModuleCredentialStorage(self.model)
self.counter = settings.get('counter')
def init_with_context(self, context):
raise NotImplementedError('subclasses of GoogleAnalytics must provide a init_with_context() method')
def counters(self):
try:
client = GoogleAnalyticsClient(self.storage)
profiles, exception = client.api_profiles()
return profiles
except Exception:
return None
def get_grouped_date(self, data, group):
if group == 'week':
date = datetime.datetime.strptime(
'%s-%s-%s' % (data['ga_year'], data['ga_week'], '0'),
'%Y-%W-%w'
)
elif group == 'month':
date = datetime.datetime.strptime(data['ga_year'] + data['ga_month'], '%Y%m')
else:
date = datetime.datetime.strptime(data['ga_date'], '%Y%m%d')
return date
def format_grouped_date(self, data, group):
date = self.get_grouped_date(data, group)
if group == 'week':
date = u'%s%s' % (
(date - datetime.timedelta(days=6)).strftime('%d.%m'),
date.strftime('%d.%m')
)
elif group == 'month':
date = date.strftime('%b, %Y')
else:
date = formats.date_format(date, 'DATE_FORMAT')
return date
def counter_attached(self):
if self.credential is None:
self.error = mark_safe(_('Please <a href="%s">attach Google account and choose Google Analytics counter</a> to start using widget') % reverse('jet-dashboard:update_module', kwargs={'pk': self.model.pk}))
return False
elif self.counter is None:
self.error = mark_safe(_('Please <a href="%s">select Google Analytics counter</a> to start using widget') % reverse('jet-dashboard:update_module', kwargs={'pk': self.model.pk}))
return False
else:
return True
def api_ga(self, group=None):
if self.counter_attached():
date1 = datetime.datetime.now() - datetime.timedelta(days=self.period)
date2 = datetime.datetime.now()
try:
client = GoogleAnalyticsClient(self.storage)
result, exception = client.api_ga(self.counter, date1, date2, group)
if exception is not None:
raise exception
return result
except Exception as e:
error = _('API request failed.')
if isinstance(e, AccessTokenRefreshError):
error += _(' Try to <a href="%s">revoke and grant access</a> again') % reverse('jet-dashboard:update_module', kwargs={'pk': self.model.pk})
self.error = mark_safe(error)
class GoogleAnalyticsVisitorsTotals(GoogleAnalyticsBase):
"""
Google Analytics widget that shows total number of users, sessions and viewers for a particular period of time.
Period may be following: Today, Last week, Last month, Last quarter, Last year
"""
title = _('Google Analytics visitors totals')
template = 'jet.dashboard/modules/google_analytics_visitors_totals.html'
#: Which period should be displayed. Allowed values - integer of days
period = None
def __init__(self, title=None, period=None, **kwargs):
kwargs.update({'period': period})
super(GoogleAnalyticsVisitorsTotals, self).__init__(title, **kwargs)
def init_with_context(self, context):
result = self.api_ga()
if result is not None:
try:
self.children.append({'title': _('users'), 'value': result['totalsForAllResults']['ga:users']})
self.children.append({'title': _('sessions'), 'value': result['totalsForAllResults']['ga:sessions']})
self.children.append({'title': _('views'), 'value': result['totalsForAllResults']['ga:pageviews']})
except KeyError:
self.error = _('Bad server response')
class GoogleAnalyticsVisitorsChart(GoogleAnalyticsBase):
"""
Google Analytics widget that shows users/sessions/viewer chart for a particular period of time.
Data is grouped by day, week or month
Period may be following: Today, Last week, Last month, Last quarter, Last year
"""
title = _('Google Analytics visitors chart')
template = 'jet.dashboard/modules/google_analytics_visitors_chart.html'
style = 'overflow-x: auto;'
#: Which period should be displayed. Allowed values - integer of days
period = None
#: What data should be shown. Possible values: ``ga:users``, ``ga:sessions``, ``ga:pageviews``
show = None
#: Sets grouping of data. Possible values: ``day``, ``week``, ``month``
group = None
settings_form = GoogleAnalyticsChartSettingsForm
class Media:
js = ('jet.dashboard/vendor/chart.js/Chart.min.js', 'jet.dashboard/dashboard_modules/google_analytics.js')
def __init__(self, title=None, period=None, show=None, group=None, **kwargs):
kwargs.update({'period': period, 'show': show, 'group': group})
super(GoogleAnalyticsVisitorsChart, self).__init__(title, **kwargs)
def settings_dict(self):
settings = super(GoogleAnalyticsVisitorsChart, self).settings_dict()
settings['show'] = self.show
settings['group'] = self.group
return settings
def load_settings(self, settings):
super(GoogleAnalyticsVisitorsChart, self).load_settings(settings)
self.show = settings.get('show')
self.group = settings.get('group')
def init_with_context(self, context):
result = self.api_ga(self.group)
if result is not None:
try:
for data in result['rows']:
row_data = {}
i = 0
for column in result['columnHeaders']:
row_data[column['name'].replace(':', '_')] = data[i]
i += 1
date = self.get_grouped_date(row_data, self.group)
self.children.append((date, row_data[self.show.replace(':', '_')]))
except KeyError:
self.error = _('Bad server response')
class GoogleAnalyticsPeriodVisitors(GoogleAnalyticsBase):
"""
Google Analytics widget that shows users, sessions and viewers for a particular period of time.
Data is grouped by day, week or month
Period may be following: Today, Last week, Last month, Last quarter, Last year
"""
title = _('Google Analytics period visitors')
template = 'jet.dashboard/modules/google_analytics_period_visitors.html'
#: Which period should be displayed. Allowed values - integer of days
period = None
#: Sets grouping of data. Possible values: ``day``, ``week``, ``month``
group = None
contrast = False
settings_form = GoogleAnalyticsPeriodVisitorsSettingsForm
def __init__(self, title=None, period=None, group=None, **kwargs):
kwargs.update({'period': period, 'group': group})
super(GoogleAnalyticsPeriodVisitors, self).__init__(title, **kwargs)
def settings_dict(self):
settings = super(GoogleAnalyticsPeriodVisitors, self).settings_dict()
settings['group'] = self.group
return settings
def load_settings(self, settings):
super(GoogleAnalyticsPeriodVisitors, self).load_settings(settings)
self.group = settings.get('group')
def init_with_context(self, context):
result = self.api_ga(self.group)
if result is not None:
try:
for data in reversed(result['rows']):
row_data = {}
i = 0
for column in result['columnHeaders']:
row_data[column['name'].replace(':', '_')] = data[i]
i += 1
date = self.format_grouped_date(row_data, self.group)
self.children.append((date, row_data))
except KeyError:
self.error = _('Bad server response')

View File

@@ -0,0 +1,58 @@
try:
from django.core.urlresolvers import reverse
except ImportError: # Django 1.11
from django.urls import reverse
from django.conf.urls import url
from django.contrib import messages
from django.shortcuts import redirect
from httplib2 import ServerNotFoundError
from jet.dashboard.dashboard_modules.google_analytics import GoogleAnalyticsClient, ModuleCredentialStorage
from jet.dashboard.models import UserDashboardModule
from jet.dashboard import dashboard
from django.http import HttpResponse
from oauth2client.client import FlowExchangeError
from django.utils.translation import ugettext_lazy as _
def google_analytics_grant_view(request, pk):
redirect_uri = request.build_absolute_uri(reverse('jet-dashboard:google-analytics-callback'))
client = GoogleAnalyticsClient(redirect_uri=redirect_uri)
return redirect(client.get_oauth_authorize_url(pk))
def google_analytics_revoke_view(request, pk):
try:
module = UserDashboardModule.objects.get(pk=pk)
ModuleCredentialStorage(module).delete()
return redirect(reverse('jet-dashboard:update_module', kwargs={'pk': module.pk}))
except UserDashboardModule.DoesNotExist:
return HttpResponse(_('Module not found'))
def google_analytics_callback_view(request):
module = None
try:
state = request.GET['state']
module = UserDashboardModule.objects.get(pk=state)
redirect_uri = request.build_absolute_uri(reverse('jet-dashboard:google-analytics-callback'))
client = GoogleAnalyticsClient(redirect_uri=redirect_uri)
client.set_credential_from_request(request)
ModuleCredentialStorage(module).put(client.credential)
except (FlowExchangeError, ValueError, ServerNotFoundError):
messages.error(request, _('API request failed.'))
except KeyError:
return HttpResponse(_('Bad arguments'))
except UserDashboardModule.DoesNotExist:
return HttpResponse(_('Module not found'))
return redirect(reverse('jet-dashboard:update_module', kwargs={'pk': module.pk}))
dashboard.urls.register_urls([
url(r'^google-analytics/grant/(?P<pk>\d+)/$', google_analytics_grant_view, name='google-analytics-grant'),
url(r'^google-analytics/revoke/(?P<pk>\d+)/$', google_analytics_revoke_view, name='google-analytics-revoke'),
url(r'^google-analytics/callback/', google_analytics_callback_view, name='google-analytics-callback'),
])

View File

@@ -0,0 +1,369 @@
# encoding: utf-8
import datetime
import json
from django import forms
try:
from django.core.urlresolvers import reverse
except ImportError: # Django 1.11
from django.urls import reverse
from django.forms import Widget
from django.utils import formats
from django.utils.html import format_html
from django.utils.safestring import mark_safe
from django.utils.text import capfirst
from jet.dashboard.modules import DashboardModule
from django.utils.translation import ugettext_lazy as _
from django.conf import settings
from django.utils.encoding import force_text
try:
from urllib import request
from urllib.parse import urlencode
from urllib.error import URLError, HTTPError
except ImportError:
import urllib2 as request
from urllib2 import URLError, HTTPError
from urllib import urlencode
JET_MODULE_YANDEX_METRIKA_CLIENT_ID = getattr(settings, 'JET_MODULE_YANDEX_METRIKA_CLIENT_ID', '')
JET_MODULE_YANDEX_METRIKA_CLIENT_SECRET = getattr(settings, 'JET_MODULE_YANDEX_METRIKA_CLIENT_SECRET', '')
class YandexMetrikaClient:
OAUTH_BASE_URL = 'https://oauth.yandex.ru/'
API_BASE_URL = 'https://api-metrika.yandex.ru/'
CLIENT_ID = JET_MODULE_YANDEX_METRIKA_CLIENT_ID
CLIENT_SECRET = JET_MODULE_YANDEX_METRIKA_CLIENT_SECRET
def __init__(self, access_token=None):
self.access_token = access_token
def request(self, base_url, url, data=None, headers=None):
url = '%s%s' % (base_url, url)
if data is not None:
data = urlencode(data).encode()
if headers is None:
headers = {}
req = request.Request(url, data, headers)
try:
f = request.urlopen(req)
result = f.read().decode('utf8')
result = json.loads(result)
except URLError as e:
return None, e
return result, None
def get_oauth_authorize_url(self, state=''):
return '%sauthorize' \
'?response_type=code' \
'&state=%s' \
'&client_id=%s' % (self.OAUTH_BASE_URL, state, self.CLIENT_ID)
def oauth_request(self, url, data=None):
return self.request(self.OAUTH_BASE_URL, url, data)
def oath_token_request(self, code):
data = {
'grant_type': 'authorization_code',
'code': code,
'client_id': self.CLIENT_ID,
'client_secret': self.CLIENT_SECRET
}
return self.oauth_request('token', data)
def api_request(self, url, data=None):
headers = None
if self.access_token is not None:
headers = {'Authorization': 'OAuth %s' % self.access_token}
return self.request(self.API_BASE_URL, url, data, headers)
def api_counters_request(self):
return self.api_request('counters.json')
def api_stat_traffic_summary(self, counter, date1, date2, group=None):
if group is None:
group = 'day'
return self.api_request('stat/traffic/summary.json?id=%s&date1=%s&date2=%s&group=%s' % (
counter,
date1.strftime('%Y%m%d'),
date2.strftime('%Y%m%d'),
group
))
class AccessTokenWidget(Widget):
module = None
def render(self, name, value, attrs=None):
if value and len(value) > 0:
link = '<a href="%s">%s</a>' % (
reverse('jet-dashboard:yandex-metrika-revoke', kwargs={'pk': self.module.model.pk}),
force_text(_('Revoke access'))
)
else:
link = '<a href="%s">%s</a>' % (
reverse('jet-dashboard:yandex-metrika-grant', kwargs={'pk': self.module.model.pk}),
force_text(_('Grant access'))
)
if value is None:
value = ''
return format_html('%s<input type="hidden" name="access_token" value="%s">' % (link, value))
class YandexMetrikaSettingsForm(forms.Form):
access_token = forms.CharField(label=_('Access'), widget=AccessTokenWidget)
counter = forms.ChoiceField(label=_('Counter'))
period = forms.ChoiceField(label=_('Statistics period'), choices=(
(0, _('Today')),
(6, _('Last week')),
(30, _('Last month')),
(31 * 3 - 1, _('Last quarter')),
(364, _('Last year')),
))
def set_module(self, module):
self.fields['access_token'].widget.module = module
self.set_counter_choices(module)
def set_counter_choices(self, module):
counters = module.counters()
if counters is not None:
self.fields['counter'].choices = (('', '-- %s --' % force_text(_('none'))),)
self.fields['counter'].choices.extend(map(lambda x: (x['id'], x['site']), counters))
else:
label = force_text(_('grant access first')) if module.access_token is None else force_text(_('counters loading failed'))
self.fields['counter'].choices = (('', '-- %s -- ' % label),)
class YandexMetrikaChartSettingsForm(YandexMetrikaSettingsForm):
show = forms.ChoiceField(label=_('Show'), choices=(
('visitors', capfirst(_('visitors'))),
('visits', capfirst(_('visits'))),
('page_views', capfirst(_('views'))),
))
group = forms.ChoiceField(label=_('Group'), choices=(
('day', _('By day')),
('week', _('By week')),
('month', _('By month')),
))
class YandexMetrikaPeriodVisitorsSettingsForm(YandexMetrikaSettingsForm):
group = forms.ChoiceField(label=_('Group'), choices=(
('day', _('By day')),
('week', _('By week')),
('month', _('By month')),
))
class YandexMetrikaBase(DashboardModule):
settings_form = YandexMetrikaSettingsForm
ajax_load = True
contrast = True
period = None
access_token = None
expires_in = None
token_type = None
counter = None
error = None
def settings_dict(self):
return {
'period': self.period,
'access_token': self.access_token,
'expires_in': self.expires_in,
'token_type': self.token_type,
'counter': self.counter
}
def load_settings(self, settings):
try:
self.period = int(settings.get('period'))
except TypeError:
self.period = 0
self.access_token = settings.get('access_token')
self.expires_in = settings.get('expires_in')
self.token_type = settings.get('token_type')
self.counter = settings.get('counter')
def init_with_context(self, context):
raise NotImplementedError('subclasses of YandexMetrika must provide a init_with_context() method')
def counters(self):
client = YandexMetrikaClient(self.access_token)
counters, exception = client.api_counters_request()
if counters is not None:
return counters['counters']
else:
return None
def format_grouped_date(self, date, group):
if group == 'week':
date = u'%s%s' % (
(date - datetime.timedelta(days=7)).strftime('%d.%m'),
date.strftime('%d.%m')
)
elif group == 'month':
date = date.strftime('%b, %Y')
else:
date = formats.date_format(date, 'DATE_FORMAT')
return date
def counter_attached(self):
if self.access_token is None:
self.error = mark_safe(_('Please <a href="%s">attach Yandex account and choose Yandex Metrika counter</a> to start using widget') % reverse('jet-dashboard:update_module', kwargs={'pk': self.model.pk}))
return False
elif self.counter is None:
self.error = mark_safe(_('Please <a href="%s">select Yandex Metrika counter</a> to start using widget') % reverse('jet-dashboard:update_module', kwargs={'pk': self.model.pk}))
return False
else:
return True
def api_stat_traffic_summary(self, group=None):
if self.counter_attached():
date1 = datetime.datetime.now() - datetime.timedelta(days=self.period)
date2 = datetime.datetime.now()
client = YandexMetrikaClient(self.access_token)
result, exception = client.api_stat_traffic_summary(self.counter, date1, date2, group)
if exception is not None:
error = _('API request failed.')
if isinstance(exception, HTTPError) and exception.code == 403:
error += _(' Try to <a href="%s">revoke and grant access</a> again') % reverse('jet-dashboard:update_module', kwargs={'pk': self.model.pk})
self.error = mark_safe(error)
else:
return result
class YandexMetrikaVisitorsTotals(YandexMetrikaBase):
"""
Yandex Metrika widget that shows total number of visitors, visits and viewers for a particular period of time.
Period may be following: Today, Last week, Last month, Last quarter, Last year
"""
title = _('Yandex Metrika visitors totals')
template = 'jet.dashboard/modules/yandex_metrika_visitors_totals.html'
#: Which period should be displayed. Allowed values - integer of days
period = None
def __init__(self, title=None, period=None, **kwargs):
kwargs.update({'period': period})
super(YandexMetrikaVisitorsTotals, self).__init__(title, **kwargs)
def init_with_context(self, context):
result = self.api_stat_traffic_summary()
if result is not None:
try:
self.children.append({'title': _('visitors'), 'value': result['totals']['visitors']})
self.children.append({'title': _('visits'), 'value': result['totals']['visits']})
self.children.append({'title': _('views'), 'value': result['totals']['page_views']})
except KeyError:
self.error = _('Bad server response')
class YandexMetrikaVisitorsChart(YandexMetrikaBase):
"""
Yandex Metrika widget that shows visitors/visits/viewer chart for a particular period of time.
Data is grouped by day, week or month
Period may be following: Today, Last week, Last month, Last quarter, Last year
"""
title = _('Yandex Metrika visitors chart')
template = 'jet.dashboard/modules/yandex_metrika_visitors_chart.html'
style = 'overflow-x: auto;'
#: Which period should be displayed. Allowed values - integer of days
period = None
#: What data should be shown. Possible values: ``visitors``, ``visits``, ``page_views``
show = None
#: Sets grouping of data. Possible values: ``day``, ``week``, ``month``
group = None
settings_form = YandexMetrikaChartSettingsForm
class Media:
js = ('jet.dashboard/vendor/chart.js/Chart.min.js', 'jet.dashboard/dashboard_modules/yandex_metrika.js')
def __init__(self, title=None, period=None, show=None, group=None, **kwargs):
kwargs.update({'period': period, 'show': show, 'group': group})
super(YandexMetrikaVisitorsChart, self).__init__(title, **kwargs)
def settings_dict(self):
settings = super(YandexMetrikaVisitorsChart, self).settings_dict()
settings['show'] = self.show
settings['group'] = self.group
return settings
def load_settings(self, settings):
super(YandexMetrikaVisitorsChart, self).load_settings(settings)
self.show = settings.get('show')
self.group = settings.get('group')
def init_with_context(self, context):
result = self.api_stat_traffic_summary(self.group)
if result is not None:
try:
for data in result['data']:
date = datetime.datetime.strptime(data['date'], '%Y%m%d')
key = self.show if self.show is not None else 'visitors'
self.children.append((date, data[key]))
except KeyError:
self.error = _('Bad server response')
class YandexMetrikaPeriodVisitors(YandexMetrikaBase):
"""
Yandex Metrika widget that shows visitors, visits and viewers for a particular period of time.
Data is grouped by day, week or month
Period may be following: Today, Last week, Last month, Last quarter, Last year
"""
title = _('Yandex Metrika period visitors')
template = 'jet.dashboard/modules/yandex_metrika_period_visitors.html'
#: Which period should be displayed. Allowed values - integer of days
period = None
#: Sets grouping of data. Possible values: ``day``, ``week``, ``month``
group = None
contrast = False
settings_form = YandexMetrikaPeriodVisitorsSettingsForm
def __init__(self, title=None, period=None, group=None, **kwargs):
kwargs.update({'period': period, 'group': group})
super(YandexMetrikaPeriodVisitors, self).__init__(title, **kwargs)
def settings_dict(self):
settings = super(YandexMetrikaPeriodVisitors, self).settings_dict()
settings['group'] = self.group
return settings
def load_settings(self, settings):
super(YandexMetrikaPeriodVisitors, self).load_settings(settings)
self.group = settings.get('group')
def init_with_context(self, context):
result = self.api_stat_traffic_summary(self.group)
if result is not None:
try:
for data in reversed(result['data']):
date = datetime.datetime.strptime(data['date'], '%Y%m%d')
date = self.format_grouped_date(date, self.group)
self.children.append((date, data))
except KeyError:
self.error = _('Bad server response')

View File

@@ -0,0 +1,68 @@
from django.conf.urls import url
from django.contrib import messages
try:
from django.core.urlresolvers import reverse
except ImportError: # Django 1.11
from django.urls import reverse
from django.http import HttpResponse
from django.shortcuts import redirect
from jet.dashboard.dashboard_modules.yandex_metrika import YandexMetrikaClient
from jet.dashboard.models import UserDashboardModule
from jet.dashboard import dashboard
from django.utils.translation import ugettext_lazy as _
def yandex_metrika_grant_view(request, pk):
client = YandexMetrikaClient()
return redirect(client.get_oauth_authorize_url(pk))
def yandex_metrika_revoke_view(request, pk):
try:
module = UserDashboardModule.objects.get(pk=pk)
module.pop_settings(('access_token', 'expires_in', 'token_type', 'counter'))
return redirect(reverse('jet-dashboard:update_module', kwargs={'pk': module.pk}))
except UserDashboardModule.DoesNotExist:
return HttpResponse(_('Module not found'))
def yandex_metrika_callback_view(request):
try:
state = request.GET['state']
code = request.GET['code']
module = UserDashboardModule.objects.get(pk=state)
client = YandexMetrikaClient()
result, exception = client.oath_token_request(code)
if result is None:
messages.error(request, _('API request failed.'))
else:
module.update_settings(result)
return redirect(reverse('jet-dashboard:update_module', kwargs={'pk': module.pk}))
except KeyError:
return HttpResponse(_('Bad arguments'))
except UserDashboardModule.DoesNotExist:
return HttpResponse(_('Module not found'))
dashboard.urls.register_urls([
url(
r'^yandex-metrika/grant/(?P<pk>\d+)/$',
yandex_metrika_grant_view,
name='yandex-metrika-grant'
),
url(
r'^yandex-metrika/revoke/(?P<pk>\d+)/$',
yandex_metrika_revoke_view,
name='yandex-metrika-revoke'
),
url(
r'^yandex-metrika/callback/$',
yandex_metrika_callback_view,
name='yandex-metrika-callback'
),
])

View File

@@ -0,0 +1,170 @@
import json
from django import forms
from django.core.exceptions import ValidationError
from jet.dashboard.models import UserDashboardModule
from jet.dashboard.utils import get_current_dashboard
from jet.utils import user_is_authenticated
class UpdateDashboardModulesForm(forms.Form):
app_label = forms.CharField(required=False)
modules = forms.CharField()
modules_objects = []
def __init__(self, request, *args, **kwargs):
self.request = request
super(UpdateDashboardModulesForm, self).__init__(*args, **kwargs)
def clean(self):
data = super(UpdateDashboardModulesForm, self).clean()
if not user_is_authenticated(self.request.user) or not self.request.user.is_staff:
raise ValidationError('error')
try:
modules = json.loads(data['modules'])
for module in modules:
db_module = UserDashboardModule.objects.get(
user=self.request.user.pk,
app_label=data['app_label'] if data['app_label'] else None,
pk=module['id']
)
column = module['column']
order = module['order']
if db_module.column != column or db_module.order != order:
db_module.column = column
db_module.order = order
self.modules_objects.append(db_module)
except Exception:
raise ValidationError('error')
return data
def save(self):
for module in self.modules_objects:
module.save()
class AddUserDashboardModuleForm(forms.ModelForm):
type = forms.CharField()
module = forms.IntegerField()
module_cls = None
def __init__(self, request, *args, **kwargs):
self.request = request
super(AddUserDashboardModuleForm, self).__init__(*args, **kwargs)
class Meta:
model = UserDashboardModule
fields = ['app_label']
def clean_app_label(self):
data = self.cleaned_data['app_label']
return data if data != '' else None
def clean(self):
data = super(AddUserDashboardModuleForm, self).clean()
if not user_is_authenticated(self.request.user) or not self.request.user.is_staff:
raise ValidationError('error')
if 'app_label' in data:
index_dashboard_cls = get_current_dashboard('app_index' if data['app_label'] else 'index')
index_dashboard = index_dashboard_cls({'request': self.request}, app_label=data['app_label'])
if 'type' in data:
if data['type'] == 'children':
module = index_dashboard.children[data['module']]
elif data['type'] == 'available_children':
module = index_dashboard.available_children[data['module']]()
else:
raise ValidationError('error')
self.module_cls = module
return data
def save(self, commit=True):
self.instance.title = self.module_cls.title
self.instance.module = self.module_cls.fullname()
self.instance.user = self.request.user.pk
self.instance.column = 0
self.instance.order = -1
self.instance.settings = self.module_cls.dump_settings()
self.instance.children = self.module_cls.dump_children()
return super(AddUserDashboardModuleForm, self).save(commit)
class UpdateDashboardModuleCollapseForm(forms.ModelForm):
def __init__(self, request, *args, **kwargs):
self.request = request
super(UpdateDashboardModuleCollapseForm, self).__init__(*args, **kwargs)
class Meta:
model = UserDashboardModule
fields = ['collapsed']
def clean(self):
data = super(UpdateDashboardModuleCollapseForm, self).clean()
if not user_is_authenticated(self.request.user) or not self.request.user.is_staff:
raise ValidationError('error')
if self.instance.user != self.request.user.pk:
raise ValidationError('error')
return data
class RemoveDashboardModuleForm(forms.ModelForm):
def __init__(self, request, *args, **kwargs):
self.request = request
super(RemoveDashboardModuleForm, self).__init__(*args, **kwargs)
class Meta:
model = UserDashboardModule
fields = []
def clean(self):
cleaned_data = super(RemoveDashboardModuleForm, self).clean()
if not user_is_authenticated(self.request.user) or self.instance.user != self.request.user.pk:
raise ValidationError('error')
return cleaned_data
def save(self, commit=True):
if commit:
self.instance.delete()
class ResetDashboardForm(forms.Form):
app_label = forms.CharField(required=False)
def __init__(self, request, *args, **kwargs):
self.request = request
super(ResetDashboardForm, self).__init__(*args, **kwargs)
class Meta:
model = UserDashboardModule
fields = []
def clean(self):
data = super(ResetDashboardForm, self).clean()
data['app_label'] = data['app_label'] if data['app_label'] else None
if not user_is_authenticated(self.request.user) or not self.request.user.is_staff:
raise ValidationError('error')
return data
def save(self, commit=True):
if commit:
UserDashboardModule.objects.filter(
user=self.request.user.pk,
app_label=self.cleaned_data['app_label']
).delete()

View File

@@ -0,0 +1,393 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-12-28 13:32+0000\n"
"PO-Revision-Date: 2017-02-12 17:28+0300\n"
"Language: ar\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"Last-Translator: Bashar <poedit@bashar.com>\n"
"Language-Team: \n"
"X-Generator: Poedit 1.8.7.1\n"
#: dashboard/modules.py:138 templates/admin/base.html:281
msgid "URL"
msgstr "الرابط"
#: dashboard/dashboard.py:207
msgid "Quick links"
msgstr "روابط سريعة"
#: dashboard/dashboard.py:213
msgid "Return to site"
msgstr "العودة للموقع"
#: dashboard/dashboard.py:224 dashboard/modules.py:268
msgid "Applications"
msgstr "التطبيقات"
#: dashboard/dashboard.py:232
msgid "Administration"
msgstr "الإدارة"
#: dashboard/dashboard.py:240 dashboard/modules.py:413
msgid "Recent Actions"
msgstr "آخر الأوامر"
#: dashboard/dashboard.py:248
msgid "Latest Django News"
msgstr "آخر أخبار جانغو"
#: dashboard/dashboard.py:257
msgid "Support"
msgstr "الدعم الفني"
#: dashboard/dashboard.py:260
msgid "Django documentation"
msgstr "توثيقات جانغو"
#: dashboard/dashboard.py:265
msgid "Django \"django-users\" mailing list"
msgstr "قائمة تراسل \"django-users\" الخاصة بجانغو"
#: dashboard/dashboard.py:270
msgid "Django irc channel"
msgstr "قناة الآي آر سي الخاصة بجانغو"
#: dashboard/dashboard.py:285
msgid "Application models"
msgstr "نماذج التطبيقات"
#: dashboard/models.py:11 dashboard/modules.py:139
msgid "Title"
msgstr "العنوان"
#: dashboard/modules.py:140
msgid "External link"
msgstr "رابط خارجي"
#: dashboard/modules.py:144
msgid "Layout"
msgstr "المخطط"
#: dashboard/modules.py:144
msgid "Stacked"
msgstr "مصفف"
#: dashboard/modules.py:144
msgid "Inline"
msgstr "خلال السطر"
#: dashboard/modules.py:190 dashboard/modules.py:214
msgid "Links"
msgstr "الروابط"
#: dashboard/modules.py:213
msgid "Link"
msgstr "رابط"
#: dashboard/modules.py:340
msgid "Models"
msgstr "النماذج"
#: dashboard/modules.py:383 dashboard/modules.py:490
msgid "Items limit"
msgstr "حدود العناصر"
#: dashboard/modules.py:491
msgid "Feed URL"
msgstr "تلقيم الرابط"
#: dashboard/modules.py:522
msgid "RSS Feed"
msgstr "تلقيم RSS"
#: dashboard/modules.py:568
msgid "You must install the FeedParser python module"
msgstr "يجب عليك تنصيب حزمة بايثون FeedParser"
#: dashboard/modules.py:573
msgid "You must provide a valid feed URL"
msgstr "يجب عليك تزويد رابط تلقيم صحيح"
#: dashboard/views.py:17
msgid "Widget was successfully updated"
msgstr "الودجة تم تجديثها بنجاح"
#: dashboard/views.py:89 dashboard/views.py:90
msgid "Items"
msgstr "عناصر"
#: dashboard/views.py:152
msgid "Widget has been successfully added"
msgstr "تم إضافة الودجة بنجاح"
#: dashboard/dashboard_modules/google_analytics.py:145
#: dashboard/dashboard_modules/yandex_metrika.py:102
msgid "Revoke access"
msgstr "سحب التصريح"
#: dashboard/dashboard_modules/google_analytics.py:150
#: dashboard/dashboard_modules/yandex_metrika.py:107
msgid "Grant access"
msgstr "إعطاء تصريح"
#: dashboard/dashboard_modules/google_analytics.py:163
#: dashboard/dashboard_modules/yandex_metrika.py:117
msgid "Access"
msgstr "التصريح"
#: dashboard/dashboard_modules/google_analytics.py:164
#: dashboard/dashboard_modules/yandex_metrika.py:118
msgid "Counter"
msgstr "عدّاد"
#: dashboard/dashboard_modules/google_analytics.py:165
#: dashboard/dashboard_modules/yandex_metrika.py:119
msgid "Statistics period"
msgstr "فترة الإحصائيات"
#: dashboard/dashboard_modules/google_analytics.py:166
#: dashboard/dashboard_modules/yandex_metrika.py:120
msgid "Today"
msgstr "اليوم"
#: dashboard/dashboard_modules/google_analytics.py:167
#: dashboard/dashboard_modules/yandex_metrika.py:121
msgid "Last week"
msgstr "الإسبوع الماضي"
#: dashboard/dashboard_modules/google_analytics.py:168
#: dashboard/dashboard_modules/yandex_metrika.py:122
msgid "Last month"
msgstr "الشهر الماضي"
#: dashboard/dashboard_modules/google_analytics.py:169
#: dashboard/dashboard_modules/yandex_metrika.py:123
msgid "Last quarter"
msgstr "ربع السنة الماضي"
#: dashboard/dashboard_modules/google_analytics.py:170
#: dashboard/dashboard_modules/yandex_metrika.py:124
msgid "Last year"
msgstr "العام الماضي"
#: dashboard/dashboard_modules/google_analytics.py:180
#: dashboard/dashboard_modules/yandex_metrika.py:134
msgid "none"
msgstr "لا شيء"
#: dashboard/dashboard_modules/google_analytics.py:183
#: dashboard/dashboard_modules/yandex_metrika.py:137
msgid "grant access first"
msgstr "أعط تصريح أولا"
#: dashboard/dashboard_modules/google_analytics.py:183
#: dashboard/dashboard_modules/yandex_metrika.py:137
msgid "counters loading failed"
msgstr "فشل تحميل العدّادات"
#: dashboard/dashboard_modules/google_analytics.py:188
#: dashboard/dashboard_modules/yandex_metrika.py:142
msgid "Show"
msgstr "اعرض"
#: dashboard/dashboard_modules/google_analytics.py:193
#: dashboard/dashboard_modules/google_analytics.py:201
#: dashboard/dashboard_modules/yandex_metrika.py:147
#: dashboard/dashboard_modules/yandex_metrika.py:155
msgid "Group"
msgstr "مجموعة"
#: dashboard/dashboard_modules/google_analytics.py:194
#: dashboard/dashboard_modules/google_analytics.py:202
#: dashboard/dashboard_modules/yandex_metrika.py:148
#: dashboard/dashboard_modules/yandex_metrika.py:156
msgid "By day"
msgstr "باليوم"
#: dashboard/dashboard_modules/google_analytics.py:195
#: dashboard/dashboard_modules/google_analytics.py:203
#: dashboard/dashboard_modules/yandex_metrika.py:149
#: dashboard/dashboard_modules/yandex_metrika.py:157
msgid "By week"
msgstr "بالإسبوع"
#: dashboard/dashboard_modules/google_analytics.py:196
#: dashboard/dashboard_modules/google_analytics.py:204
#: dashboard/dashboard_modules/yandex_metrika.py:150
#: dashboard/dashboard_modules/yandex_metrika.py:158
msgid "By month"
msgstr "بالشهر"
#: dashboard/dashboard_modules/google_analytics.py:277
#, python-format
msgid ""
"Please <a href=\"%s\">attach Google account and choose Google Analytics "
"counter</a> to start using widget"
msgstr ""
"الرجاء <a href=\"%s\">إرفاق حساب جوجل و إختر عداد احصائيات جوجل</a> للبدء "
"بإستخدام الودجة"
#: dashboard/dashboard_modules/google_analytics.py:280
#, python-format
msgid ""
"Please <a href=\"%s\">select Google Analytics counter</a> to start using "
"widget"
msgstr ""
"الرجاء <a href=\"%s\">إختر عداد احصائيات جوجل</a> للبدء بإستخدام الودجة"
#: dashboard/dashboard_modules/google_analytics.py:299
#: dashboard/dashboard_modules/google_analytics_views.py:42
#: dashboard/dashboard_modules/yandex_metrika.py:236
#: dashboard/dashboard_modules/yandex_metrika_views.py:37
msgid "API request failed."
msgstr "طلب API فشل"
#: dashboard/dashboard_modules/google_analytics.py:301
#: dashboard/dashboard_modules/yandex_metrika.py:238
#, python-format
msgid " Try to <a href=\"%s\">revoke and grant access</a> again"
msgstr "جرب <a href=\"%s\">حذف و إضافة التصريح</a> مرة اخرى"
#: dashboard/dashboard_modules/google_analytics.py:311
msgid "Google Analytics visitors totals"
msgstr "عدد زوار إحصائيات جوجل الإجمالي"
#: dashboard/dashboard_modules/google_analytics.py:189
#: dashboard/templates/jet.dashboard/modules/google_analytics_period_visitors.html:15
#: dashboard/dashboard_modules/google_analytics.py:326
msgid "users"
msgstr "المستخدمين"
#: dashboard/dashboard_modules/google_analytics.py:190
#: dashboard/templates/jet.dashboard/modules/google_analytics_period_visitors.html:16
#: dashboard/dashboard_modules/google_analytics.py:327
msgid "sessions"
msgstr "الجلسات"
#: dashboard/dashboard_modules/google_analytics.py:191
#: dashboard/dashboard_modules/yandex_metrika.py:146
#: dashboard/templates/jet.dashboard/modules/google_analytics_period_visitors.html:17
#: dashboard/templates/jet.dashboard/modules/yandex_metrika_period_visitors.html:17
#: dashboard/dashboard_modules/google_analytics.py:328
#: dashboard/dashboard_modules/yandex_metrika.py:267
msgid "views"
msgstr "إستعراضات"
#: dashboard/dashboard_modules/google_analytics.py:330
#: dashboard/dashboard_modules/google_analytics.py:388
#: dashboard/dashboard_modules/google_analytics.py:438
#: dashboard/dashboard_modules/yandex_metrika.py:269
#: dashboard/dashboard_modules/yandex_metrika.py:321
#: dashboard/dashboard_modules/yandex_metrika.py:365
msgid "Bad server response"
msgstr "رد خاطئ من الخادم"
#: dashboard/dashboard_modules/google_analytics.py:340
msgid "Google Analytics visitors chart"
msgstr "مخطط زوار إحصائيات جوجل"
#: dashboard/dashboard_modules/google_analytics.py:398
msgid "Google Analytics period visitors"
msgstr "عدد زوار إحصائيات جوجل للفترات"
#: dashboard/dashboard_modules/google_analytics_views.py:26
#: dashboard/dashboard_modules/google_analytics_views.py:46
#: dashboard/dashboard_modules/yandex_metrika_views.py:23
#: dashboard/dashboard_modules/yandex_metrika_views.py:45
msgid "Module not found"
msgstr "لم يتم العثور على الوحدة"
#: dashboard/dashboard_modules/google_analytics_views.py:44
#: dashboard/dashboard_modules/yandex_metrika_views.py:43
msgid "Bad arguments"
msgstr "رمز سيئة"
#: dashboard/dashboard_modules/yandex_metrika.py:219
#, python-format
msgid ""
"Please <a href=\"%s\">attach Yandex account and choose Yandex Metrika "
"counter</a> to start using widget"
msgstr ""
"الرجاء <a href=\"%s\">إرفاق حساب ياندكس و إختر عداد يانديكس متريكا</a> للبدء "
"بإستخدام الودجة"
#: dashboard/dashboard_modules/yandex_metrika.py:222
#, python-format
msgid ""
"Please <a href=\"%s\">select Yandex Metrika counter</a> to start using widget"
msgstr ""
"الرجاء <a href=\"%s\"> إختيار عداد يانديكس متريكا</a> للبدء بإستخدام الودجة"
#: dashboard/dashboard_modules/yandex_metrika.py:250
msgid "Yandex Metrika visitors totals"
msgstr "عدد زوار إحصائيات يانديكس متريكا الإجمالي"
#: dashboard/dashboard_modules/yandex_metrika.py:144
#: dashboard/templates/jet.dashboard/modules/yandex_metrika_period_visitors.html:15
#: dashboard/dashboard_modules/yandex_metrika.py:265
msgid "visitors"
msgstr "الزوار"
#: dashboard/dashboard_modules/yandex_metrika.py:145
#: dashboard/templates/jet.dashboard/modules/yandex_metrika_period_visitors.html:16
#: dashboard/dashboard_modules/yandex_metrika.py:266
msgid "visits"
msgstr "الزيارات"
#: dashboard/dashboard_modules/yandex_metrika.py:279
msgid "Yandex Metrika visitors chart"
msgstr "مخطط زوار إحصائيات يانديكس متريكا"
#: dashboard/dashboard_modules/yandex_metrika.py:331
msgid "Yandex Metrika period visitors"
msgstr "عدد زوار إحصائيات يانديكس متريكا للفترات"
#: dashboard/templates/jet.dashboard/dashboard.html:17
msgid "Delete widget"
msgstr "حذف الودجة"
#: dashboard/templates/jet.dashboard/dashboard.html:18
msgid "Are you sure want to delete this widget?"
msgstr "هل أنت متأكد من حذف هذه الودجة؟"
#: dashboard/templates/jet.dashboard/dashboard_tools.html:7
msgid "widgets"
msgstr "الودجات"
#: dashboard/templates/jet.dashboard/dashboard_tools.html:8
msgid "available"
msgstr "متاح"
#: dashboard/templates/jet.dashboard/dashboard_tools.html:13
msgid "initials"
msgstr "الحروف الأولية من الإسم"
#: dashboard/templates/jet.dashboard/dashboard_tools.html:21
#: dashboard/templates/jet.dashboard/dashboard_tools.html:27
msgid "Reset widgets"
msgstr "إعادة ضبط الودجة"
#: dashboard/templates/jet.dashboard/dashboard_tools.html:28
msgid "Are you sure want to reset widgets?"
msgstr "هل أنت متأكد من إعادة ضبط الودجة؟"
#: dashboard/templates/jet.dashboard/modules/feed.html:13
#: dashboard/templates/jet.dashboard/modules/google_analytics_period_visitors.html:34
#: dashboard/templates/jet.dashboard/modules/google_analytics_visitors_chart.html:30
#: dashboard/templates/jet.dashboard/modules/google_analytics_visitors_totals.html:23
#: dashboard/templates/jet.dashboard/modules/link_list.html:26
#: dashboard/templates/jet.dashboard/modules/yandex_metrika_period_visitors.html:34
#: dashboard/templates/jet.dashboard/modules/yandex_metrika_visitors_chart.html:30
#: dashboard/templates/jet.dashboard/modules/yandex_metrika_visitors_totals.html:23
msgid "Nothing to show"
msgstr "لا يوجد شئ للعرض"

View File

@@ -0,0 +1,30 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-09-11 12:44+0000\n"
"PO-Revision-Date: 2017-02-12 17:28+0300\n"
"Language: ar\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Last-Translator: Bashar <poedit@bashar.com>\n"
"Language-Team: \n"
"X-Generator: Poedit 1.8.7.1\n"
#: static/jet/js/src/features/dashboard.js:79
#: static/jet/js/src/features/dashboard.js:208
msgid "Cancel"
msgstr "إلغاء"
#: static/jet/js/src/features/dashboard.js:203
msgid "Delete"
msgstr "حذف"
#: static/jet/js/src/features/dashboard.js:74
msgid "Yes"
msgstr "نعم"

View File

@@ -0,0 +1,390 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-12-28 13:32+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
#: dashboard/modules.py:138 templates/admin/base.html:281
msgid "URL"
msgstr "URL"
#: dashboard/dashboard.py:207
msgid "Quick links"
msgstr "Rychlé odkazy"
#: dashboard/dashboard.py:213
msgid "Return to site"
msgstr "Vrátit na stránku"
#: dashboard/dashboard.py:224 dashboard/modules.py:268
msgid "Applications"
msgstr "Aplikace"
#: dashboard/dashboard.py:232
msgid "Administration"
msgstr "Administrace"
#: dashboard/dashboard.py:240 dashboard/modules.py:413
msgid "Recent Actions"
msgstr "Poslední akce"
#: dashboard/dashboard.py:248
msgid "Latest Django News"
msgstr "Nejnovější zprávy o Djangu"
#: dashboard/dashboard.py:257
msgid "Support"
msgstr "Podpora"
#: dashboard/dashboard.py:260
msgid "Django documentation"
msgstr "Django dokumentace"
#: dashboard/dashboard.py:265
msgid "Django \"django-users\" mailing list"
msgstr "Django \"django-users\" mailing list"
#: dashboard/dashboard.py:270
msgid "Django irc channel"
msgstr "Django irc kanál"
#: dashboard/dashboard.py:285
msgid "Application models"
msgstr "Modely aplikace"
#: dashboard/models.py:11 dashboard/modules.py:139
msgid "Title"
msgstr "Název"
#: dashboard/modules.py:140
msgid "External link"
msgstr "Externí odkazy"
#: dashboard/modules.py:144
msgid "Layout"
msgstr "Rozložení"
#: dashboard/modules.py:144
msgid "Stacked"
msgstr ""
#: dashboard/modules.py:144
msgid "Inline"
msgstr ""
#: dashboard/modules.py:190 dashboard/modules.py:214
msgid "Links"
msgstr "Odkazy"
#: dashboard/modules.py:213
msgid "Link"
msgstr "Odkaz"
#: dashboard/modules.py:340
msgid "Models"
msgstr "Modely"
#: dashboard/modules.py:383 dashboard/modules.py:490
msgid "Items limit"
msgstr "Limit položek"
#: dashboard/modules.py:491
msgid "Feed URL"
msgstr "URL feedu"
#: dashboard/modules.py:522
msgid "RSS Feed"
msgstr "RSS Feed"
#: dashboard/modules.py:568
msgid "You must install the FeedParser python module"
msgstr "Musíte nainstalovat FeedParser python modul"
#: dashboard/modules.py:573
msgid "You must provide a valid feed URL"
msgstr "Musíte zadat valídní URL feedu"
#: dashboard/views.py:17
msgid "Widget was successfully updated"
msgstr "Widget byl úspěšně aktualizován"
#: dashboard/views.py:89 dashboard/views.py:90
msgid "Items"
msgstr "Položky"
#: dashboard/views.py:152
msgid "Widget has been successfully added"
msgstr "Widget byl úspěšně přidán"
#: dashboard/dashboard_modules/google_analytics.py:145
#: dashboard/dashboard_modules/yandex_metrika.py:102
msgid "Revoke access"
msgstr "Odebrat přístup"
#: dashboard/dashboard_modules/google_analytics.py:150
#: dashboard/dashboard_modules/yandex_metrika.py:107
msgid "Grant access"
msgstr "Povolit přístup"
#: dashboard/dashboard_modules/google_analytics.py:163
#: dashboard/dashboard_modules/yandex_metrika.py:117
msgid "Access"
msgstr "Přístup"
#: dashboard/dashboard_modules/google_analytics.py:164
#: dashboard/dashboard_modules/yandex_metrika.py:118
msgid "Counter"
msgstr "Počítadlo"
#: dashboard/dashboard_modules/google_analytics.py:165
#: dashboard/dashboard_modules/yandex_metrika.py:119
msgid "Statistics period"
msgstr "Statistická perioda"
#: dashboard/dashboard_modules/google_analytics.py:166
#: dashboard/dashboard_modules/yandex_metrika.py:120
msgid "Today"
msgstr "Dnes"
#: dashboard/dashboard_modules/google_analytics.py:167
#: dashboard/dashboard_modules/yandex_metrika.py:121
msgid "Last week"
msgstr "Poslední týden"
#: dashboard/dashboard_modules/google_analytics.py:168
#: dashboard/dashboard_modules/yandex_metrika.py:122
msgid "Last month"
msgstr "Poslední měsíc"
#: dashboard/dashboard_modules/google_analytics.py:169
#: dashboard/dashboard_modules/yandex_metrika.py:123
msgid "Last quarter"
msgstr "Poslední čtvrtletí"
#: dashboard/dashboard_modules/google_analytics.py:170
#: dashboard/dashboard_modules/yandex_metrika.py:124
msgid "Last year"
msgstr "Poslední rok"
#: dashboard/dashboard_modules/google_analytics.py:180
#: dashboard/dashboard_modules/yandex_metrika.py:134
msgid "none"
msgstr "nic"
#: dashboard/dashboard_modules/google_analytics.py:183
#: dashboard/dashboard_modules/yandex_metrika.py:137
msgid "grant access first"
msgstr "povolte nejdřív přístup"
#: dashboard/dashboard_modules/google_analytics.py:183
#: dashboard/dashboard_modules/yandex_metrika.py:137
msgid "counters loading failed"
msgstr "nepodařilo se načíst počítadla"
#: dashboard/dashboard_modules/google_analytics.py:188
#: dashboard/dashboard_modules/yandex_metrika.py:142
msgid "Show"
msgstr "Zobrazit"
#: dashboard/dashboard_modules/google_analytics.py:193
#: dashboard/dashboard_modules/google_analytics.py:201
#: dashboard/dashboard_modules/yandex_metrika.py:147
#: dashboard/dashboard_modules/yandex_metrika.py:155
msgid "Group"
msgstr "Skupina"
#: dashboard/dashboard_modules/google_analytics.py:194
#: dashboard/dashboard_modules/google_analytics.py:202
#: dashboard/dashboard_modules/yandex_metrika.py:148
#: dashboard/dashboard_modules/yandex_metrika.py:156
msgid "By day"
msgstr "Dle dne"
#: dashboard/dashboard_modules/google_analytics.py:195
#: dashboard/dashboard_modules/google_analytics.py:203
#: dashboard/dashboard_modules/yandex_metrika.py:149
#: dashboard/dashboard_modules/yandex_metrika.py:157
msgid "By week"
msgstr "Dle týdne"
#: dashboard/dashboard_modules/google_analytics.py:196
#: dashboard/dashboard_modules/google_analytics.py:204
#: dashboard/dashboard_modules/yandex_metrika.py:150
#: dashboard/dashboard_modules/yandex_metrika.py:158
msgid "By month"
msgstr "Dle měsíce"
#: dashboard/dashboard_modules/google_analytics.py:277
#, python-format
msgid ""
"Please <a href=\"%s\">attach Google account and choose Google Analytics "
"counter</a> to start using widget"
msgstr ""
"Prosím <a href=\"%s\">připojte Google účet a vyberte Google Analytics "
"počítadlo</a> pro využívání widgetu"
#: dashboard/dashboard_modules/google_analytics.py:280
#, python-format
msgid ""
"Please <a href=\"%s\">select Google Analytics counter</a> to start using "
"widget"
msgstr ""
"Prosím <a href=\"%s\">vyberte Google Analytics počítadlo</a> pro využívání "
"widgetu"
#: dashboard/dashboard_modules/google_analytics.py:299
#: dashboard/dashboard_modules/google_analytics_views.py:42
#: dashboard/dashboard_modules/yandex_metrika.py:236
#: dashboard/dashboard_modules/yandex_metrika_views.py:37
msgid "API request failed."
msgstr "Požadavek API se nezdařil."
#: dashboard/dashboard_modules/google_analytics.py:301
#: dashboard/dashboard_modules/yandex_metrika.py:238
#, python-format
msgid " Try to <a href=\"%s\">revoke and grant access</a> again"
msgstr " Zkuste <a href=\"%s\">zakázat a povolit přístup</a> znovu"
#: dashboard/dashboard_modules/google_analytics.py:311
msgid "Google Analytics visitors totals"
msgstr "Celkový počet návštěvníků Google Analytics"
#: dashboard/dashboard_modules/google_analytics.py:189
#: dashboard/templates/jet.dashboard/modules/google_analytics_period_visitors.html:15
#: dashboard/dashboard_modules/google_analytics.py:326
msgid "users"
msgstr "uživatelé"
#: dashboard/dashboard_modules/google_analytics.py:190
#: dashboard/templates/jet.dashboard/modules/google_analytics_period_visitors.html:16
#: dashboard/dashboard_modules/google_analytics.py:327
msgid "sessions"
msgstr "sezení"
#: dashboard/dashboard_modules/google_analytics.py:191
#: dashboard/dashboard_modules/yandex_metrika.py:146
#: dashboard/templates/jet.dashboard/modules/google_analytics_period_visitors.html:17
#: dashboard/templates/jet.dashboard/modules/yandex_metrika_period_visitors.html:17
#: dashboard/dashboard_modules/google_analytics.py:328
#: dashboard/dashboard_modules/yandex_metrika.py:267
msgid "views"
msgstr "zobrazení"
#: dashboard/dashboard_modules/google_analytics.py:330
#: dashboard/dashboard_modules/google_analytics.py:388
#: dashboard/dashboard_modules/google_analytics.py:438
#: dashboard/dashboard_modules/yandex_metrika.py:269
#: dashboard/dashboard_modules/yandex_metrika.py:321
#: dashboard/dashboard_modules/yandex_metrika.py:365
msgid "Bad server response"
msgstr "Špatná odpověď serveru"
#: dashboard/dashboard_modules/google_analytics.py:340
msgid "Google Analytics visitors chart"
msgstr "Graf návštěvníků Google Analytics"
#: dashboard/dashboard_modules/google_analytics.py:398
msgid "Google Analytics period visitors"
msgstr "Perioda návštěvníků Google Analytics"
#: dashboard/dashboard_modules/google_analytics_views.py:26
#: dashboard/dashboard_modules/google_analytics_views.py:46
#: dashboard/dashboard_modules/yandex_metrika_views.py:23
#: dashboard/dashboard_modules/yandex_metrika_views.py:45
msgid "Module not found"
msgstr "Modul nedostupný"
#: dashboard/dashboard_modules/google_analytics_views.py:44
#: dashboard/dashboard_modules/yandex_metrika_views.py:43
msgid "Bad arguments"
msgstr "Špatné argumenty"
#: dashboard/dashboard_modules/yandex_metrika.py:219
#, python-format
msgid ""
"Please <a href=\"%s\">attach Yandex account and choose Yandex Metrika "
"counter</a> to start using widget"
msgstr ""
#: dashboard/dashboard_modules/yandex_metrika.py:222
#, python-format
msgid ""
"Please <a href=\"%s\">select Yandex Metrika counter</a> to start using widget"
msgstr ""
#: dashboard/dashboard_modules/yandex_metrika.py:250
msgid "Yandex Metrika visitors totals"
msgstr ""
#: dashboard/dashboard_modules/yandex_metrika.py:144
#: dashboard/templates/jet.dashboard/modules/yandex_metrika_period_visitors.html:15
#: dashboard/dashboard_modules/yandex_metrika.py:265
msgid "visitors"
msgstr ""
#: dashboard/dashboard_modules/yandex_metrika.py:145
#: dashboard/templates/jet.dashboard/modules/yandex_metrika_period_visitors.html:16
#: dashboard/dashboard_modules/yandex_metrika.py:266
msgid "visits"
msgstr ""
#: dashboard/dashboard_modules/yandex_metrika.py:279
msgid "Yandex Metrika visitors chart"
msgstr ""
#: dashboard/dashboard_modules/yandex_metrika.py:331
msgid "Yandex Metrika period visitors"
msgstr ""
#: dashboard/templates/jet.dashboard/dashboard.html:17
msgid "Delete widget"
msgstr "Smazat widget"
#: dashboard/templates/jet.dashboard/dashboard.html:18
msgid "Are you sure want to delete this widget?"
msgstr "Opravdu si přejete smazat tento widget?"
#: dashboard/templates/jet.dashboard/dashboard_tools.html:7
msgid "widgets"
msgstr "widgety"
#: dashboard/templates/jet.dashboard/dashboard_tools.html:8
msgid "available"
msgstr "dostupné"
#: dashboard/templates/jet.dashboard/dashboard_tools.html:13
msgid "initials"
msgstr "počáteční"
#: dashboard/templates/jet.dashboard/dashboard_tools.html:21
#: dashboard/templates/jet.dashboard/dashboard_tools.html:27
msgid "Reset widgets"
msgstr "Resetovat widgety"
#: dashboard/templates/jet.dashboard/dashboard_tools.html:28
msgid "Are you sure want to reset widgets?"
msgstr "Opravdu si přejete resetovat widgety?"
#: dashboard/templates/jet.dashboard/modules/feed.html:13
#: dashboard/templates/jet.dashboard/modules/google_analytics_period_visitors.html:34
#: dashboard/templates/jet.dashboard/modules/google_analytics_visitors_chart.html:30
#: dashboard/templates/jet.dashboard/modules/google_analytics_visitors_totals.html:23
#: dashboard/templates/jet.dashboard/modules/link_list.html:26
#: dashboard/templates/jet.dashboard/modules/yandex_metrika_period_visitors.html:34
#: dashboard/templates/jet.dashboard/modules/yandex_metrika_visitors_chart.html:30
#: dashboard/templates/jet.dashboard/modules/yandex_metrika_visitors_totals.html:23
msgid "Nothing to show"
msgstr "Nic ke zobrazení"

View File

@@ -0,0 +1,28 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-09-11 12:44+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: static/jet/js/src/features/dashboard.js:79 static/jet/js/src/features/dashboard.js:208
msgid "Cancel"
msgstr "Zrušit"
#: static/jet/js/src/features/dashboard.js:203
msgid "Delete"
msgstr "Smazat"
#: static/jet/js/src/features/dashboard.js:74
msgid "Yes"
msgstr "Ano"

View File

@@ -0,0 +1,331 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-08-30 14:54+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Dominik Bartenstein <db@zemtu.com>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: German\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
msgid "Quick links"
msgstr ""
msgid "Return to site"
msgstr "Zur Website zurückkehren"
msgid "Change password"
msgstr ""
msgid "Log out"
msgstr ""
msgid "Applications"
msgstr ""
msgid "Administration"
msgstr ""
msgid "Recent Actions"
msgstr ""
msgid "Latest Django News"
msgstr "Aktuelle Django Neuigkeiten"
msgid "Support"
msgstr ""
msgid "Django documentation"
msgstr "Django Dokumentation"
msgid "Django \"django-users\" mailing list"
msgstr "Django \"django-users\" Mailingliste"
msgid "Django irc channel"
msgstr "Django IRC Kanal"
msgid "Application models"
msgstr "Anwendungsmodelle"
msgid "Revoke access"
msgstr "Zugriff zurückziehen"
msgid "Grant access"
msgstr "Zugriff erlauben"
msgid "Access"
msgstr "Zugriff"
msgid "Counter"
msgstr "Zähler"
msgid "Statistics period"
msgstr "Statistikzeitraum"
msgid "Today"
msgstr ""
msgid "Last week"
msgstr "Letzte Woche"
msgid "Last month"
msgstr "Letzer Monat"
msgid "Last quarter"
msgstr "Letztes Quartal"
msgid "Last year"
msgstr "Letztes Jahr"
# Hint: message id None in contrib/admin
msgid "none"
msgstr ""
msgid "grant access first"
msgstr "Zuerst muss Zugriff erlaubt werden"
msgid "counters loading failed"
msgstr "Laden des Zählers fehlgeschlagen"
msgid "Show"
msgstr ""
msgid "users"
msgstr ""
msgid "sessions"
msgstr ""
msgid "views"
msgstr ""
msgid "Group"
msgstr ""
msgid "By day"
msgstr "Nach Tag"
msgid "By week"
msgstr "Nach Woche"
msgid "By month"
msgstr "Nach Monat"
#, python-format
msgid ""
"Please <a href=\"%s\">attach Google account and choose Google Analytics "
"counter</a> to start using widget"
msgstr ""
"Bitte <a href=\"%s\">mit Google Konto verbinden und Google Analytics "
"Zähler auswählen</a>, um das Widget verwenden zu können"
#, python-format
msgid ""
"Please <a href=\"%s\">select Google Analytics counter</a> to start using "
"widget"
msgstr ""
"Bitte <a href=\"%s\">Google Analytics Zähler auswählen</a>, um das Widget "
"verwenden zu können"
msgid "API request failed."
msgstr "API Request fehlgeschlagen."
#, python-format
msgid " Try to <a href=\"%s\">revoke and grant access</a> again"
msgstr " Versuche <a href=\"%s\">Zugriff zurückzuziehen und anschließend wieder zu erlauben</a>"
msgid "Google Analytics visitors totals"
msgstr "Google Analytics Besucher insgesamt"
msgid "Bad server response"
msgstr ""
msgid "Google Analytics visitors chart"
msgstr "Google Analytics Besucher Diagramm"
msgid "Google Analytics period visitors"
msgstr "Google Analytics Besucher im Zeitraum"
msgid "Module not found"
msgstr "Modul nicht gefunden"
msgid "Bad arguments"
msgstr "Falsche Argumente"
msgid "visitors"
msgstr "Besucher"
msgid "visits"
msgstr "Besuche"
#, python-format
msgid ""
"Please <a href=\"%s\">attach Yandex account and choose Yandex Metrika "
"counter</a> to start using widget"
msgstr ""
"Bitte <a href=\"%s\">Yandex Konto verbinden und Yandex Metrika "
"Zähler auswählen</a>, um Widget zu verwenden"
#, python-format
msgid ""
"Please <a href=\"%s\">select Yandex Metrika counter</a> to start using widget"
msgstr ""
"Bitte <a href=\"%s\">Yandex Metrika Zähler auwählen</a>, um das Widget verwenden zu können"
msgid "Yandex Metrika visitors totals"
msgstr "Yandex Metrika Besucher insgesamt"
msgid "Yandex Metrika visitors chart"
msgstr "Yandex Metrika Besucher Diagramm"
msgid "Yandex Metrika period visitors"
msgstr "Yandex Metrika Besuche im Zeitraum"
msgid "Title"
msgstr ""
msgid "module"
msgstr "Modul"
msgid "application name"
msgstr ""
msgid "user"
msgstr ""
msgid "column"
msgstr "Spalte"
msgid "order"
msgstr "Sortierung"
msgid "settings"
msgstr "Einstellungen"
msgid "children"
msgstr "Kinder"
msgid "collapsed"
msgstr "eingeklappt"
msgid "user dashboard module"
msgstr "Benutzer Dashboard Modul"
msgid "user dashboard modules"
msgstr "Benutzer Dashboard Module"
msgid "URL"
msgstr ""
msgid "External link"
msgstr "Externer Link"
msgid "Layout"
msgstr ""
msgid "Stacked"
msgstr "Gestapelt"
msgid "Inline"
msgstr ""
msgid "Links"
msgstr "Links"
msgid "Link"
msgstr "Link"
msgid "Models"
msgstr "Modelle"
msgid "Items limit"
msgstr "Objektlimit"
msgid "Feed URL"
msgstr ""
msgid "RSS Feed"
msgstr ""
msgid "You must install the FeedParser python module"
msgstr "Bitte FeedParser Python modul installieren"
msgid "You must provide a valid feed URL"
msgstr "Bitte eine gültige Feed URL angeben"
msgid "Delete widget"
msgstr "Widget löschen"
msgid "Are you sure want to delete this widget?"
msgstr "Sind sie sicher, dass sie das Widget löschen wollen?"
msgid "widgets"
msgstr "Widgets"
msgid "available"
msgstr "verfügbar"
msgid "initials"
msgstr ""
msgid "Add"
msgstr ""
msgid "Reset widgets"
msgstr "Widgets zurücksetzen"
msgid "Are you sure want to reset widgets?"
msgstr "Sind sie sicher, dass sie die Widgets zurücksetzen wollen?"
msgid "Change"
msgstr ""
msgid "Delete"
msgstr ""
#, python-format
msgid "Models in the %(name)s application"
msgstr ""
msgid "Nothing to show"
msgstr "Nichts anzuzeigen"
msgid "Date"
msgstr ""
msgid "None available"
msgstr ""
msgid "Unknown content"
msgstr ""
msgid "Home"
msgstr ""
msgid "Please correct the errors below."
msgstr ""
#, python-format
msgid "Add another %(verbose_name)s"
msgstr ""
msgid "Save"
msgstr ""
msgid "Widget was successfully updated"
msgstr "Widget wurde erfolgreich aktualisiert"
msgid "Items"
msgstr "Objekte"
msgid "Widget has been successfully added"
msgstr "Widget wurde erfolgreich hinzugefügt"

View File

@@ -0,0 +1,28 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-09-11 12:44+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Dominik Bartenstein <db@zemtu.com>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: German\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: static/jet/js/src/features/dashboard.js:79 static/jet/js/src/features/dashboard.js:208
msgid "Cancel"
msgstr ""
#: static/jet/js/src/features/dashboard.js:203
msgid "Delete"
msgstr ""
#: static/jet/js/src/features/dashboard.js:74
msgid "Yes"
msgstr ""

View File

@@ -0,0 +1,386 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-12-28 13:32+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
#: dashboard/modules.py:138 templates/admin/base.html:281
msgid "URL"
msgstr ""
#: dashboard/dashboard.py:207
msgid "Quick links"
msgstr ""
#: dashboard/dashboard.py:213
msgid "Return to site"
msgstr ""
#: dashboard/dashboard.py:224 dashboard/modules.py:268
msgid "Applications"
msgstr ""
#: dashboard/dashboard.py:232
msgid "Administration"
msgstr ""
#: dashboard/dashboard.py:240 dashboard/modules.py:413
msgid "Recent Actions"
msgstr ""
#: dashboard/dashboard.py:248
msgid "Latest Django News"
msgstr ""
#: dashboard/dashboard.py:257
msgid "Support"
msgstr ""
#: dashboard/dashboard.py:260
msgid "Django documentation"
msgstr ""
#: dashboard/dashboard.py:265
msgid "Django \"django-users\" mailing list"
msgstr ""
#: dashboard/dashboard.py:270
msgid "Django irc channel"
msgstr ""
#: dashboard/dashboard.py:285
msgid "Application models"
msgstr ""
#: dashboard/models.py:11 dashboard/modules.py:139
msgid "Title"
msgstr ""
#: dashboard/modules.py:140
msgid "External link"
msgstr ""
#: dashboard/modules.py:144
msgid "Layout"
msgstr ""
#: dashboard/modules.py:144
msgid "Stacked"
msgstr ""
#: dashboard/modules.py:144
msgid "Inline"
msgstr ""
#: dashboard/modules.py:190 dashboard/modules.py:214
msgid "Links"
msgstr ""
#: dashboard/modules.py:213
msgid "Link"
msgstr ""
#: dashboard/modules.py:340
msgid "Models"
msgstr ""
#: dashboard/modules.py:383 dashboard/modules.py:490
msgid "Items limit"
msgstr ""
#: dashboard/modules.py:491
msgid "Feed URL"
msgstr ""
#: dashboard/modules.py:522
msgid "RSS Feed"
msgstr ""
#: dashboard/modules.py:568
msgid "You must install the FeedParser python module"
msgstr ""
#: dashboard/modules.py:573
msgid "You must provide a valid feed URL"
msgstr ""
#: dashboard/views.py:17
msgid "Widget was successfully updated"
msgstr ""
#: dashboard/views.py:89 dashboard/views.py:90
msgid "Items"
msgstr ""
#: dashboard/views.py:152
msgid "Widget has been successfully added"
msgstr ""
#: dashboard/dashboard_modules/google_analytics.py:145
#: dashboard/dashboard_modules/yandex_metrika.py:102
msgid "Revoke access"
msgstr ""
#: dashboard/dashboard_modules/google_analytics.py:150
#: dashboard/dashboard_modules/yandex_metrika.py:107
msgid "Grant access"
msgstr ""
#: dashboard/dashboard_modules/google_analytics.py:163
#: dashboard/dashboard_modules/yandex_metrika.py:117
msgid "Access"
msgstr ""
#: dashboard/dashboard_modules/google_analytics.py:164
#: dashboard/dashboard_modules/yandex_metrika.py:118
msgid "Counter"
msgstr ""
#: dashboard/dashboard_modules/google_analytics.py:165
#: dashboard/dashboard_modules/yandex_metrika.py:119
msgid "Statistics period"
msgstr ""
#: dashboard/dashboard_modules/google_analytics.py:166
#: dashboard/dashboard_modules/yandex_metrika.py:120
msgid "Today"
msgstr ""
#: dashboard/dashboard_modules/google_analytics.py:167
#: dashboard/dashboard_modules/yandex_metrika.py:121
msgid "Last week"
msgstr ""
#: dashboard/dashboard_modules/google_analytics.py:168
#: dashboard/dashboard_modules/yandex_metrika.py:122
msgid "Last month"
msgstr ""
#: dashboard/dashboard_modules/google_analytics.py:169
#: dashboard/dashboard_modules/yandex_metrika.py:123
msgid "Last quarter"
msgstr ""
#: dashboard/dashboard_modules/google_analytics.py:170
#: dashboard/dashboard_modules/yandex_metrika.py:124
msgid "Last year"
msgstr ""
#: dashboard/dashboard_modules/google_analytics.py:180
#: dashboard/dashboard_modules/yandex_metrika.py:134
msgid "none"
msgstr ""
#: dashboard/dashboard_modules/google_analytics.py:183
#: dashboard/dashboard_modules/yandex_metrika.py:137
msgid "grant access first"
msgstr ""
#: dashboard/dashboard_modules/google_analytics.py:183
#: dashboard/dashboard_modules/yandex_metrika.py:137
msgid "counters loading failed"
msgstr ""
#: dashboard/dashboard_modules/google_analytics.py:188
#: dashboard/dashboard_modules/yandex_metrika.py:142
msgid "Show"
msgstr ""
#: dashboard/dashboard_modules/google_analytics.py:193
#: dashboard/dashboard_modules/google_analytics.py:201
#: dashboard/dashboard_modules/yandex_metrika.py:147
#: dashboard/dashboard_modules/yandex_metrika.py:155
msgid "Group"
msgstr ""
#: dashboard/dashboard_modules/google_analytics.py:194
#: dashboard/dashboard_modules/google_analytics.py:202
#: dashboard/dashboard_modules/yandex_metrika.py:148
#: dashboard/dashboard_modules/yandex_metrika.py:156
msgid "By day"
msgstr ""
#: dashboard/dashboard_modules/google_analytics.py:195
#: dashboard/dashboard_modules/google_analytics.py:203
#: dashboard/dashboard_modules/yandex_metrika.py:149
#: dashboard/dashboard_modules/yandex_metrika.py:157
msgid "By week"
msgstr ""
#: dashboard/dashboard_modules/google_analytics.py:196
#: dashboard/dashboard_modules/google_analytics.py:204
#: dashboard/dashboard_modules/yandex_metrika.py:150
#: dashboard/dashboard_modules/yandex_metrika.py:158
msgid "By month"
msgstr ""
#: dashboard/dashboard_modules/google_analytics.py:277
#, python-format
msgid ""
"Please <a href=\"%s\">attach Google account and choose Google Analytics "
"counter</a> to start using widget"
msgstr ""
#: dashboard/dashboard_modules/google_analytics.py:280
#, python-format
msgid ""
"Please <a href=\"%s\">select Google Analytics counter</a> to start using "
"widget"
msgstr ""
#: dashboard/dashboard_modules/google_analytics.py:299
#: dashboard/dashboard_modules/google_analytics_views.py:42
#: dashboard/dashboard_modules/yandex_metrika.py:236
#: dashboard/dashboard_modules/yandex_metrika_views.py:37
msgid "API request failed."
msgstr ""
#: dashboard/dashboard_modules/google_analytics.py:301
#: dashboard/dashboard_modules/yandex_metrika.py:238
#, python-format
msgid " Try to <a href=\"%s\">revoke and grant access</a> again"
msgstr ""
#: dashboard/dashboard_modules/google_analytics.py:311
msgid "Google Analytics visitors totals"
msgstr ""
#: dashboard/dashboard_modules/google_analytics.py:189
#: dashboard/templates/jet.dashboard/modules/google_analytics_period_visitors.html:15
#: dashboard/dashboard_modules/google_analytics.py:326
msgid "users"
msgstr ""
#: dashboard/dashboard_modules/google_analytics.py:190
#: dashboard/templates/jet.dashboard/modules/google_analytics_period_visitors.html:16
#: dashboard/dashboard_modules/google_analytics.py:327
msgid "sessions"
msgstr ""
#: dashboard/dashboard_modules/google_analytics.py:191
#: dashboard/dashboard_modules/yandex_metrika.py:146
#: dashboard/templates/jet.dashboard/modules/google_analytics_period_visitors.html:17
#: dashboard/templates/jet.dashboard/modules/yandex_metrika_period_visitors.html:17
#: dashboard/dashboard_modules/google_analytics.py:328
#: dashboard/dashboard_modules/yandex_metrika.py:267
msgid "views"
msgstr ""
#: dashboard/dashboard_modules/google_analytics.py:330
#: dashboard/dashboard_modules/google_analytics.py:388
#: dashboard/dashboard_modules/google_analytics.py:438
#: dashboard/dashboard_modules/yandex_metrika.py:269
#: dashboard/dashboard_modules/yandex_metrika.py:321
#: dashboard/dashboard_modules/yandex_metrika.py:365
msgid "Bad server response"
msgstr ""
#: dashboard/dashboard_modules/google_analytics.py:340
msgid "Google Analytics visitors chart"
msgstr ""
#: dashboard/dashboard_modules/google_analytics.py:398
msgid "Google Analytics period visitors"
msgstr ""
#: dashboard/dashboard_modules/google_analytics_views.py:26
#: dashboard/dashboard_modules/google_analytics_views.py:46
#: dashboard/dashboard_modules/yandex_metrika_views.py:23
#: dashboard/dashboard_modules/yandex_metrika_views.py:45
msgid "Module not found"
msgstr ""
#: dashboard/dashboard_modules/google_analytics_views.py:44
#: dashboard/dashboard_modules/yandex_metrika_views.py:43
msgid "Bad arguments"
msgstr ""
#: dashboard/dashboard_modules/yandex_metrika.py:219
#, python-format
msgid ""
"Please <a href=\"%s\">attach Yandex account and choose Yandex Metrika "
"counter</a> to start using widget"
msgstr ""
#: dashboard/dashboard_modules/yandex_metrika.py:222
#, python-format
msgid ""
"Please <a href=\"%s\">select Yandex Metrika counter</a> to start using widget"
msgstr ""
#: dashboard/dashboard_modules/yandex_metrika.py:250
msgid "Yandex Metrika visitors totals"
msgstr ""
#: dashboard/dashboard_modules/yandex_metrika.py:144
#: dashboard/templates/jet.dashboard/modules/yandex_metrika_period_visitors.html:15
#: dashboard/dashboard_modules/yandex_metrika.py:265
msgid "visitors"
msgstr ""
#: dashboard/dashboard_modules/yandex_metrika.py:145
#: dashboard/templates/jet.dashboard/modules/yandex_metrika_period_visitors.html:16
#: dashboard/dashboard_modules/yandex_metrika.py:266
msgid "visits"
msgstr ""
#: dashboard/dashboard_modules/yandex_metrika.py:279
msgid "Yandex Metrika visitors chart"
msgstr ""
#: dashboard/dashboard_modules/yandex_metrika.py:331
msgid "Yandex Metrika period visitors"
msgstr ""
#: dashboard/templates/jet.dashboard/dashboard.html:17
msgid "Delete widget"
msgstr ""
#: dashboard/templates/jet.dashboard/dashboard.html:18
msgid "Are you sure want to delete this widget?"
msgstr ""
#: dashboard/templates/jet.dashboard/dashboard_tools.html:7
msgid "widgets"
msgstr ""
#: dashboard/templates/jet.dashboard/dashboard_tools.html:8
msgid "available"
msgstr ""
#: dashboard/templates/jet.dashboard/dashboard_tools.html:13
msgid "initials"
msgstr ""
#: dashboard/templates/jet.dashboard/dashboard_tools.html:21
#: dashboard/templates/jet.dashboard/dashboard_tools.html:27
msgid "Reset widgets"
msgstr ""
#: dashboard/templates/jet.dashboard/dashboard_tools.html:28
msgid "Are you sure want to reset widgets?"
msgstr ""
#: dashboard/templates/jet.dashboard/modules/feed.html:13
#: dashboard/templates/jet.dashboard/modules/google_analytics_period_visitors.html:34
#: dashboard/templates/jet.dashboard/modules/google_analytics_visitors_chart.html:30
#: dashboard/templates/jet.dashboard/modules/google_analytics_visitors_totals.html:23
#: dashboard/templates/jet.dashboard/modules/link_list.html:26
#: dashboard/templates/jet.dashboard/modules/yandex_metrika_period_visitors.html:34
#: dashboard/templates/jet.dashboard/modules/yandex_metrika_visitors_chart.html:30
#: dashboard/templates/jet.dashboard/modules/yandex_metrika_visitors_totals.html:23
msgid "Nothing to show"
msgstr ""

View File

@@ -0,0 +1,28 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-09-11 12:44+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: static/jet/js/src/features/dashboard.js:79 static/jet/js/src/features/dashboard.js:208
msgid "Cancel"
msgstr ""
#: static/jet/js/src/features/dashboard.js:203
msgid "Delete"
msgstr ""
#: static/jet/js/src/features/dashboard.js:74
msgid "Yes"
msgstr ""

View File

@@ -0,0 +1,497 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-08-19 15:33-0500\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: dashboard/dashboard.py:210
msgid "Quick links"
msgstr "Enlaces Rápidos"
#: dashboard/dashboard.py:216
msgid "Return to site"
msgstr "Volver al sitio"
#: dashboard/dashboard.py:217
msgid "Change password"
msgstr "Cambiar contraseña"
#: dashboard/dashboard.py:219
msgid "Log out"
msgstr "Cerrar sesión"
#: dashboard/dashboard.py:227 dashboard/modules.py:293
msgid "Applications"
msgstr "Aplicaciones"
#: dashboard/dashboard.py:235
msgid "Administration"
msgstr "Administración"
#: dashboard/dashboard.py:243 dashboard/modules.py:438
msgid "Recent Actions"
msgstr "Acciones recientes"
#: dashboard/dashboard.py:251
msgid "Latest Django News"
msgstr "Últimas Noticias de Django"
#: dashboard/dashboard.py:260
msgid "Support"
msgstr "Soporte"
#: dashboard/dashboard.py:263
msgid "Django documentation"
msgstr "Documentación Django"
#: dashboard/dashboard.py:268
msgid "Django \"django-users\" mailing list"
msgstr "Lista de correos Django \"django-users\""
#: dashboard/dashboard.py:273
msgid "Django irc channel"
msgstr "Canal IRC de Django"
#: dashboard/dashboard.py:288
msgid "Application models"
msgstr "Modelos de la aplicación"
#: dashboard/dashboard_modules/google_analytics.py:145
#: dashboard/dashboard_modules/yandex_metrika.py:103
msgid "Revoke access"
msgstr "Revocar acceso"
#: dashboard/dashboard_modules/google_analytics.py:150
#: dashboard/dashboard_modules/yandex_metrika.py:108
msgid "Grant access"
msgstr "Garantizar acceso"
#: dashboard/dashboard_modules/google_analytics.py:163
#: dashboard/dashboard_modules/yandex_metrika.py:118
msgid "Access"
msgstr "Acceso"
#: dashboard/dashboard_modules/google_analytics.py:164
#: dashboard/dashboard_modules/yandex_metrika.py:119
msgid "Counter"
msgstr "Contador"
#: dashboard/dashboard_modules/google_analytics.py:165
#: dashboard/dashboard_modules/yandex_metrika.py:120
msgid "Statistics period"
msgstr "Periodo de estadísticas"
#: dashboard/dashboard_modules/google_analytics.py:166
#: dashboard/dashboard_modules/yandex_metrika.py:121
msgid "Today"
msgstr "Hoy"
#: dashboard/dashboard_modules/google_analytics.py:167
#: dashboard/dashboard_modules/yandex_metrika.py:122
msgid "Last week"
msgstr "Última semana"
#: dashboard/dashboard_modules/google_analytics.py:168
#: dashboard/dashboard_modules/yandex_metrika.py:123
msgid "Last month"
msgstr "Último mes"
#: dashboard/dashboard_modules/google_analytics.py:169
#: dashboard/dashboard_modules/yandex_metrika.py:124
msgid "Last quarter"
msgstr "Último cuatrimestre"
#: dashboard/dashboard_modules/google_analytics.py:170
#: dashboard/dashboard_modules/yandex_metrika.py:125
msgid "Last year"
msgstr "Último año"
#: dashboard/dashboard_modules/google_analytics.py:180
#: dashboard/dashboard_modules/yandex_metrika.py:135
msgid "none"
msgstr "ninguno"
#: dashboard/dashboard_modules/google_analytics.py:183
#: dashboard/dashboard_modules/yandex_metrika.py:138
msgid "grant access first"
msgstr "garantizar primer acceso"
#: dashboard/dashboard_modules/google_analytics.py:183
#: dashboard/dashboard_modules/yandex_metrika.py:138
msgid "counters loading failed"
msgstr "falló la carga de contadores"
#: dashboard/dashboard_modules/google_analytics.py:188
#: dashboard/dashboard_modules/yandex_metrika.py:143
msgid "Show"
msgstr "Mostrar"
#: dashboard/dashboard_modules/google_analytics.py:189
#: dashboard/dashboard_modules/google_analytics.py:326
#: dashboard/templates/jet.dashboard/modules/google_analytics_period_visitors.html:15
msgid "users"
msgstr "usuarios"
#: dashboard/dashboard_modules/google_analytics.py:190
#: dashboard/dashboard_modules/google_analytics.py:327
#: dashboard/templates/jet.dashboard/modules/google_analytics_period_visitors.html:16
msgid "sessions"
msgstr "sesiones"
#: dashboard/dashboard_modules/google_analytics.py:191
#: dashboard/dashboard_modules/google_analytics.py:328
#: dashboard/dashboard_modules/yandex_metrika.py:146
#: dashboard/dashboard_modules/yandex_metrika.py:267
#: dashboard/templates/jet.dashboard/modules/google_analytics_period_visitors.html:17
#: dashboard/templates/jet.dashboard/modules/yandex_metrika_period_visitors.html:17
msgid "views"
msgstr "vistas"
#: dashboard/dashboard_modules/google_analytics.py:193
#: dashboard/dashboard_modules/google_analytics.py:201
#: dashboard/dashboard_modules/yandex_metrika.py:148
#: dashboard/dashboard_modules/yandex_metrika.py:156
msgid "Group"
msgstr "Grupo"
#: dashboard/dashboard_modules/google_analytics.py:194
#: dashboard/dashboard_modules/google_analytics.py:202
#: dashboard/dashboard_modules/yandex_metrika.py:149
#: dashboard/dashboard_modules/yandex_metrika.py:157
msgid "By day"
msgstr "Por día"
#: dashboard/dashboard_modules/google_analytics.py:195
#: dashboard/dashboard_modules/google_analytics.py:203
#: dashboard/dashboard_modules/yandex_metrika.py:150
#: dashboard/dashboard_modules/yandex_metrika.py:158
msgid "By week"
msgstr "Por semana"
#: dashboard/dashboard_modules/google_analytics.py:196
#: dashboard/dashboard_modules/google_analytics.py:204
#: dashboard/dashboard_modules/yandex_metrika.py:151
#: dashboard/dashboard_modules/yandex_metrika.py:159
msgid "By month"
msgstr "Por mes"
#: dashboard/dashboard_modules/google_analytics.py:277
#, python-format
msgid ""
"Please <a href=\"%s\">attach Google account and choose Google Analytics "
"counter</a> to start using widget"
msgstr ""
"Por favor <a href=\"%s\">agregue una cuenta Google y elija un contador "
"Google Analytics</a> para comenzar a usar este artilugio."
#: dashboard/dashboard_modules/google_analytics.py:280
#, python-format
msgid ""
"Please <a href=\"%s\">select Google Analytics counter</a> to start using "
"widget"
msgstr ""
"Por favor <a href=\"%s\">seleccione un contador Google Analytics</a> para "
"comenzar a usar este artilugio"
#: dashboard/dashboard_modules/google_analytics.py:299
#: dashboard/dashboard_modules/google_analytics_views.py:42
#: dashboard/dashboard_modules/yandex_metrika.py:236
#: dashboard/dashboard_modules/yandex_metrika_views.py:37
msgid "API request failed."
msgstr "Falló la petición API."
#: dashboard/dashboard_modules/google_analytics.py:301
#: dashboard/dashboard_modules/yandex_metrika.py:238
#, python-format
msgid " Try to <a href=\"%s\">revoke and grant access</a> again"
msgstr " Intente <a href=\"%s\">revocar y garantizar el acceso</a> nuevamente"
#: dashboard/dashboard_modules/google_analytics.py:311
msgid "Google Analytics visitors totals"
msgstr "Total de visitantes Google Analytics"
#: dashboard/dashboard_modules/google_analytics.py:330
#: dashboard/dashboard_modules/google_analytics.py:388
#: dashboard/dashboard_modules/google_analytics.py:438
#: dashboard/dashboard_modules/yandex_metrika.py:269
#: dashboard/dashboard_modules/yandex_metrika.py:321
#: dashboard/dashboard_modules/yandex_metrika.py:365
msgid "Bad server response"
msgstr "Respuesta negativa del servidor"
#: dashboard/dashboard_modules/google_analytics.py:340
msgid "Google Analytics visitors chart"
msgstr "Gráfico de visitantes Google Analytics"
#: dashboard/dashboard_modules/google_analytics.py:398
msgid "Google Analytics period visitors"
msgstr "Periodo de visitantes Google Analytics"
#: dashboard/dashboard_modules/google_analytics_views.py:26
#: dashboard/dashboard_modules/google_analytics_views.py:46
#: dashboard/dashboard_modules/yandex_metrika_views.py:23
#: dashboard/dashboard_modules/yandex_metrika_views.py:45
msgid "Module not found"
msgstr "No se encontró el módulo"
#: dashboard/dashboard_modules/google_analytics_views.py:44
#: dashboard/dashboard_modules/yandex_metrika_views.py:43
msgid "Bad arguments"
msgstr "Argumentos erróneos"
#: dashboard/dashboard_modules/yandex_metrika.py:144
#: dashboard/dashboard_modules/yandex_metrika.py:265
#: dashboard/templates/jet.dashboard/modules/yandex_metrika_period_visitors.html:15
msgid "visitors"
msgstr "visitantes"
#: dashboard/dashboard_modules/yandex_metrika.py:145
#: dashboard/dashboard_modules/yandex_metrika.py:266
#: dashboard/templates/jet.dashboard/modules/yandex_metrika_period_visitors.html:16
msgid "visits"
msgstr "visitas"
#: dashboard/dashboard_modules/yandex_metrika.py:219
#, python-format
msgid ""
"Please <a href=\"%s\">attach Yandex account and choose Yandex Metrika "
"counter</a> to start using widget"
msgstr ""
"Por favor <a href=\"%s\">agregue una cuenta Yandex y elija un contador "
"Yandex Metrika </a> para comenzar a usar este artilugio"
#: dashboard/dashboard_modules/yandex_metrika.py:222
#, python-format
msgid ""
"Please <a href=\"%s\">select Yandex Metrika counter</a> to start using widget"
msgstr ""
"Por favor <a href=\"%s\">seleccion un contador Yandex Metrika</a> para "
"comenzar a usar este artilugio"
#: dashboard/dashboard_modules/yandex_metrika.py:250
msgid "Yandex Metrika visitors totals"
msgstr "Total de visitantes Yandex Metrika"
#: dashboard/dashboard_modules/yandex_metrika.py:279
msgid "Yandex Metrika visitors chart"
msgstr "Gráfica de visitantes Yandex Metrika"
#: dashboard/dashboard_modules/yandex_metrika.py:331
msgid "Yandex Metrika period visitors"
msgstr "Periodo de visitantes Yandex Metrika"
#: dashboard/models.py:11 dashboard/modules.py:164
msgid "Title"
msgstr "Título"
#: dashboard/models.py:12
msgid "module"
msgstr "módulo"
#: dashboard/models.py:13
msgid "application name"
msgstr "nombre de la aplicación"
#: dashboard/models.py:14
msgid "user"
msgstr "usuario"
#: dashboard/models.py:15
msgid "column"
msgstr "columna"
#: dashboard/models.py:16
msgid "order"
msgstr "orden"
#: dashboard/models.py:17
msgid "settings"
msgstr "opciones"
#: dashboard/models.py:18
msgid "children"
msgstr "hijos"
#: dashboard/models.py:19
msgid "collapsed"
msgstr "colapsada"
#: dashboard/models.py:22
msgid "user dashboard module"
msgstr "módulo de usuario en tablero"
#: dashboard/models.py:23
msgid "user dashboard modules"
msgstr "módulos de usuario en tablero"
#: dashboard/modules.py:163
msgid "URL"
msgstr "URL"
#: dashboard/modules.py:165
msgid "External link"
msgstr "Enlace externo"
#: dashboard/modules.py:169
msgid "Layout"
msgstr "Disposición"
#: dashboard/modules.py:169
msgid "Stacked"
msgstr "Apilado"
#: dashboard/modules.py:169
msgid "Inline"
msgstr "En linea"
#: dashboard/modules.py:215 dashboard/modules.py:239
msgid "Links"
msgstr "Enlaces"
#: dashboard/modules.py:238
msgid "Link"
msgstr "Enlace"
#: dashboard/modules.py:365
msgid "Models"
msgstr "Modelos"
#: dashboard/modules.py:408 dashboard/modules.py:515
msgid "Items limit"
msgstr "Límite de elementos"
#: dashboard/modules.py:516
msgid "Feed URL"
msgstr "URL de Alimentador"
#: dashboard/modules.py:547
msgid "RSS Feed"
msgstr "Alimentador RSS"
#: dashboard/modules.py:593
msgid "You must install the FeedParser python module"
msgstr "Debe instalar el módulo python FeedParser"
#: dashboard/modules.py:598
msgid "You must provide a valid feed URL"
msgstr "Debe proveer un URL de alimentador válido"
#: dashboard/templates/jet.dashboard/dashboard.html:17
msgid "Delete widget"
msgstr "Eliminar Artilugio"
#: dashboard/templates/jet.dashboard/dashboard.html:18
msgid "Are you sure want to delete this widget?"
msgstr "¿Está seguro de que desea eliminar este artilugio?"
#: dashboard/templates/jet.dashboard/dashboard_tools.html:12
msgid "widgets"
msgstr "artilugios"
#: dashboard/templates/jet.dashboard/dashboard_tools.html:13
msgid "available"
msgstr "habilitado"
#: dashboard/templates/jet.dashboard/dashboard_tools.html:18
msgid "initials"
msgstr "iniciales"
#: dashboard/templates/jet.dashboard/dashboard_tools.html:23
#: dashboard/templates/jet.dashboard/modules/app_list.html:18
#: dashboard/templates/jet.dashboard/modules/model_list.html:8
msgid "Add"
msgstr "Añadir"
#: dashboard/templates/jet.dashboard/dashboard_tools.html:26
#: dashboard/templates/jet.dashboard/dashboard_tools.html:32
msgid "Reset widgets"
msgstr "Reiniciar artilugios"
#: dashboard/templates/jet.dashboard/dashboard_tools.html:33
msgid "Are you sure want to reset widgets?"
msgstr "Está seguro de que quiere reiniciar este artilugio?"
#: dashboard/templates/jet.dashboard/module.html:19
#: dashboard/templates/jet.dashboard/modules/app_list.html:24
#: dashboard/templates/jet.dashboard/modules/model_list.html:14
#: dashboard/views.py:89
msgid "Change"
msgstr "Cambiar"
#: dashboard/templates/jet.dashboard/module.html:22
#: dashboard/templates/jet.dashboard/update_module.html:62
#: dashboard/templates/jet.dashboard/update_module.html:64
msgid "Delete"
msgstr "Eliminar"
#: dashboard/templates/jet.dashboard/modules/app_list.html:7
#: dashboard/templates/jet.dashboard/modules/app_list.html:10
#, python-format
msgid "Models in the %(name)s application"
msgstr "Modelos en la aplicación %(name)s"
#: dashboard/templates/jet.dashboard/modules/feed.html:13
#: dashboard/templates/jet.dashboard/modules/google_analytics_period_visitors.html:34
#: dashboard/templates/jet.dashboard/modules/google_analytics_visitors_chart.html:30
#: dashboard/templates/jet.dashboard/modules/google_analytics_visitors_totals.html:23
#: dashboard/templates/jet.dashboard/modules/link_list.html:26
#: dashboard/templates/jet.dashboard/modules/yandex_metrika_period_visitors.html:34
#: dashboard/templates/jet.dashboard/modules/yandex_metrika_visitors_chart.html:30
#: dashboard/templates/jet.dashboard/modules/yandex_metrika_visitors_totals.html:23
msgid "Nothing to show"
msgstr "Nada para mostrar"
#: dashboard/templates/jet.dashboard/modules/google_analytics_period_visitors.html:14
#: dashboard/templates/jet.dashboard/modules/yandex_metrika_period_visitors.html:14
msgid "Date"
msgstr "Fecha"
#: dashboard/templates/jet.dashboard/modules/recent_actions.html:6
msgid "None available"
msgstr "Ninguno habilitado"
#: dashboard/templates/jet.dashboard/modules/recent_actions.html:30
msgid "Unknown content"
msgstr "Contenido desconocido"
#: dashboard/templates/jet.dashboard/update_module.html:14
msgid "Home"
msgstr "Inicio"
#: dashboard/templates/jet.dashboard/update_module.html:32
msgid "Please correct the errors below."
msgstr "Por favor corrija los presentes debajo."
#: dashboard/templates/jet.dashboard/update_module.html:76
#, python-format
msgid "Add another %(verbose_name)s"
msgstr "Añadir otro %(verbose_name)s"
#: dashboard/templates/jet.dashboard/update_module.html:88
msgid "Save"
msgstr "Guardar"
#: dashboard/views.py:18
msgid "Widget was successfully updated"
msgstr "El artilugio fue actualizado exitosamente"
#: dashboard/views.py:93 dashboard/views.py:94
msgid "Items"
msgstr "Elementos"
#: dashboard/views.py:160
msgid "Widget has been successfully added"
msgstr "El artilugio ha sido exitosamente añadido"

View File

@@ -0,0 +1,28 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-09-11 12:44+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: static/jet/js/src/features/dashboard.js:79 static/jet/js/src/features/dashboard.js:208
msgid "Cancel"
msgstr "Cancelar"
#: static/jet/js/src/features/dashboard.js:203
msgid "Delete"
msgstr "Eliminar"
#: static/jet/js/src/features/dashboard.js:74
msgid "Yes"
msgstr "Sí"

View File

@@ -0,0 +1,497 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-05-25 12:27+0430\n"
"PO-Revision-Date: 2017-05-24 23:51+0430\n"
"Last-Translator: Pyzenberg <pyzenberg@gmail.com>\n"
"Language-Team: \n"
"Language: fa\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Poedit 1.8.9\n"
#: dashboard/dashboard.py:215
msgid "Quick links"
msgstr "لینک های سریع"
#: dashboard/dashboard.py:221
msgid "Return to site"
msgstr "بازگش به سایت"
#: dashboard/dashboard.py:222
msgid "Change password"
msgstr "تغییر رمزعبور"
#: dashboard/dashboard.py:224
msgid "Log out"
msgstr "خروج"
#: dashboard/dashboard.py:232 dashboard/modules.py:299
msgid "Applications"
msgstr "اپلیکیشن ها"
#: dashboard/dashboard.py:240
msgid "Administration"
msgstr "راهبری"
#: dashboard/dashboard.py:248 dashboard/modules.py:446
msgid "Recent Actions"
msgstr "کنش‌های اخیر"
#: dashboard/dashboard.py:256
msgid "Latest Django News"
msgstr "آخرین خبرهای جنگو"
#: dashboard/dashboard.py:265
msgid "Support"
msgstr "پشتیبانی"
#: dashboard/dashboard.py:268
msgid "Django documentation"
msgstr "مستندات جنگو"
#: dashboard/dashboard.py:273
msgid "Django \"django-users\" mailing list"
msgstr "فهرست ایمیلی جنگو (django-users)"
#: dashboard/dashboard.py:278
msgid "Django irc channel"
msgstr "کانال‌های irc جنگو"
#: dashboard/dashboard.py:293
msgid "Application models"
msgstr "مدل‌های اپلیکیشن"
#: dashboard/dashboard_modules/google_analytics.py:149
#: dashboard/dashboard_modules/yandex_metrika.py:107
msgid "Revoke access"
msgstr "گرفتن دسترسی"
#: dashboard/dashboard_modules/google_analytics.py:154
#: dashboard/dashboard_modules/yandex_metrika.py:112
msgid "Grant access"
msgstr "دادن دسترسی"
#: dashboard/dashboard_modules/google_analytics.py:167
#: dashboard/dashboard_modules/yandex_metrika.py:122
msgid "Access"
msgstr "دسترسی"
#: dashboard/dashboard_modules/google_analytics.py:168
#: dashboard/dashboard_modules/yandex_metrika.py:123
msgid "Counter"
msgstr "شمارشگر"
#: dashboard/dashboard_modules/google_analytics.py:169
#: dashboard/dashboard_modules/yandex_metrika.py:124
msgid "Statistics period"
msgstr "دوره آماری"
#: dashboard/dashboard_modules/google_analytics.py:170
#: dashboard/dashboard_modules/yandex_metrika.py:125
msgid "Today"
msgstr "امروز"
#: dashboard/dashboard_modules/google_analytics.py:171
#: dashboard/dashboard_modules/yandex_metrika.py:126
msgid "Last week"
msgstr "هفته پیش"
#: dashboard/dashboard_modules/google_analytics.py:172
#: dashboard/dashboard_modules/yandex_metrika.py:127
msgid "Last month"
msgstr "ماه پیش"
#: dashboard/dashboard_modules/google_analytics.py:173
#: dashboard/dashboard_modules/yandex_metrika.py:128
msgid "Last quarter"
msgstr "سه ماه پیش"
#: dashboard/dashboard_modules/google_analytics.py:174
#: dashboard/dashboard_modules/yandex_metrika.py:129
msgid "Last year"
msgstr "سال پیش"
#: dashboard/dashboard_modules/google_analytics.py:184
#: dashboard/dashboard_modules/yandex_metrika.py:139
msgid "none"
msgstr "هیچکدام"
#: dashboard/dashboard_modules/google_analytics.py:187
#: dashboard/dashboard_modules/yandex_metrika.py:142
msgid "grant access first"
msgstr "ابتدا دسترسی بدهید"
#: dashboard/dashboard_modules/google_analytics.py:187
#: dashboard/dashboard_modules/yandex_metrika.py:142
msgid "counters loading failed"
msgstr "بارگذاری شمارشگر ناموفق بود"
#: dashboard/dashboard_modules/google_analytics.py:192
#: dashboard/dashboard_modules/yandex_metrika.py:147
msgid "Show"
msgstr "نمایش"
#: dashboard/dashboard_modules/google_analytics.py:193
#: dashboard/dashboard_modules/google_analytics.py:330
#: dashboard/templates/jet.dashboard/modules/google_analytics_period_visitors.html:15
msgid "users"
msgstr "کاربران"
#: dashboard/dashboard_modules/google_analytics.py:194
#: dashboard/dashboard_modules/google_analytics.py:331
#: dashboard/templates/jet.dashboard/modules/google_analytics_period_visitors.html:16
msgid "sessions"
msgstr "نشست‌ها"
#: dashboard/dashboard_modules/google_analytics.py:195
#: dashboard/dashboard_modules/google_analytics.py:332
#: dashboard/dashboard_modules/yandex_metrika.py:150
#: dashboard/dashboard_modules/yandex_metrika.py:271
#: dashboard/templates/jet.dashboard/modules/google_analytics_period_visitors.html:17
#: dashboard/templates/jet.dashboard/modules/yandex_metrika_period_visitors.html:17
msgid "views"
msgstr "نماها"
#: dashboard/dashboard_modules/google_analytics.py:197
#: dashboard/dashboard_modules/google_analytics.py:205
#: dashboard/dashboard_modules/yandex_metrika.py:152
#: dashboard/dashboard_modules/yandex_metrika.py:160
msgid "Group"
msgstr "گروه"
#: dashboard/dashboard_modules/google_analytics.py:198
#: dashboard/dashboard_modules/google_analytics.py:206
#: dashboard/dashboard_modules/yandex_metrika.py:153
#: dashboard/dashboard_modules/yandex_metrika.py:161
msgid "By day"
msgstr "روزانه"
#: dashboard/dashboard_modules/google_analytics.py:199
#: dashboard/dashboard_modules/google_analytics.py:207
#: dashboard/dashboard_modules/yandex_metrika.py:154
#: dashboard/dashboard_modules/yandex_metrika.py:162
msgid "By week"
msgstr "هفتگی"
#: dashboard/dashboard_modules/google_analytics.py:200
#: dashboard/dashboard_modules/google_analytics.py:208
#: dashboard/dashboard_modules/yandex_metrika.py:155
#: dashboard/dashboard_modules/yandex_metrika.py:163
msgid "By month"
msgstr "ماهانه"
#: dashboard/dashboard_modules/google_analytics.py:281
#, python-format
msgid ""
"Please <a href=\"%s\">attach Google account and choose Google Analytics "
"counter</a> to start using widget"
msgstr ""
"لطفا برای شروع به کار این ویجت <a href=\"%s\">حساب گوگل را متصل و Google "
"Analytics را انتخاب</a> نمایید"
#: dashboard/dashboard_modules/google_analytics.py:284
#, python-format
msgid ""
"Please <a href=\"%s\">select Google Analytics counter</a> to start using "
"widget"
msgstr ""
"لطفا برای شروع به کار این ویجت <a href=\"%s\">شمارنده Google Analytics را "
"انتخاب</a> نمایید"
#: dashboard/dashboard_modules/google_analytics.py:303
#: dashboard/dashboard_modules/google_analytics_views.py:46
#: dashboard/dashboard_modules/yandex_metrika.py:240
#: dashboard/dashboard_modules/yandex_metrika_views.py:41
msgid "API request failed."
msgstr "درخواست API ناموفق بود."
#: dashboard/dashboard_modules/google_analytics.py:305
#: dashboard/dashboard_modules/yandex_metrika.py:242
#, python-format
msgid " Try to <a href=\"%s\">revoke and grant access</a> again"
msgstr " سعی کنید تا مجددا <a href=\"%s\">دسترسی را گرفته یا بدهید</a> again"
#: dashboard/dashboard_modules/google_analytics.py:315
msgid "Google Analytics visitors totals"
msgstr "تعداد کل بازدیدکننده های Google Analytics"
#: dashboard/dashboard_modules/google_analytics.py:334
#: dashboard/dashboard_modules/google_analytics.py:392
#: dashboard/dashboard_modules/google_analytics.py:442
#: dashboard/dashboard_modules/yandex_metrika.py:273
#: dashboard/dashboard_modules/yandex_metrika.py:325
#: dashboard/dashboard_modules/yandex_metrika.py:369
msgid "Bad server response"
msgstr "پاسخ نامناسب از سمت سرور"
#: dashboard/dashboard_modules/google_analytics.py:344
msgid "Google Analytics visitors chart"
msgstr "نمودار بازدیدکنندگان Google Analytics"
#: dashboard/dashboard_modules/google_analytics.py:402
msgid "Google Analytics period visitors"
msgstr "بازدیدکنندگان دوره ای Google Analytics"
#: dashboard/dashboard_modules/google_analytics_views.py:30
#: dashboard/dashboard_modules/google_analytics_views.py:50
#: dashboard/dashboard_modules/yandex_metrika_views.py:27
#: dashboard/dashboard_modules/yandex_metrika_views.py:49
msgid "Module not found"
msgstr "ماژول پیدا نشد"
#: dashboard/dashboard_modules/google_analytics_views.py:48
#: dashboard/dashboard_modules/yandex_metrika_views.py:47
msgid "Bad arguments"
msgstr "پارامترهای نامناسب"
#: dashboard/dashboard_modules/yandex_metrika.py:148
#: dashboard/dashboard_modules/yandex_metrika.py:269
#: dashboard/templates/jet.dashboard/modules/yandex_metrika_period_visitors.html:15
msgid "visitors"
msgstr "بازدیدکنندگان"
#: dashboard/dashboard_modules/yandex_metrika.py:149
#: dashboard/dashboard_modules/yandex_metrika.py:270
#: dashboard/templates/jet.dashboard/modules/yandex_metrika_period_visitors.html:16
msgid "visits"
msgstr "بازدیدها"
#: dashboard/dashboard_modules/yandex_metrika.py:223
#, python-format
msgid ""
"Please <a href=\"%s\">attach Yandex account and choose Yandex Metrika "
"counter</a> to start using widget"
msgstr ""
"لطفا Please <a href=\"%s\">حساب Yandex را متصل و شمارشگر Yandex Metrika</a> "
"را انتخاب نمایید"
#: dashboard/dashboard_modules/yandex_metrika.py:226
#, python-format
msgid ""
"Please <a href=\"%s\">select Yandex Metrika counter</a> to start using widget"
msgstr ""
"لطفا <a href=\"%s\">شمارشگر Yandex Metrika</a> را برای شروع انتخاب نمایید"
#: dashboard/dashboard_modules/yandex_metrika.py:254
msgid "Yandex Metrika visitors totals"
msgstr "کل بازدیدهای Yandex Metrika"
#: dashboard/dashboard_modules/yandex_metrika.py:283
msgid "Yandex Metrika visitors chart"
msgstr "نمودار بازدیدهای Yandex Metrika"
#: dashboard/dashboard_modules/yandex_metrika.py:335
msgid "Yandex Metrika period visitors"
msgstr "بازدیدکنندگان دوره ای Yandex Metrika"
#: dashboard/models.py:11 dashboard/modules.py:164
msgid "Title"
msgstr "عنوان"
#: dashboard/models.py:12
msgid "module"
msgstr "ماژول"
#: dashboard/models.py:13
msgid "application name"
msgstr "نام اپلیکیشن"
#: dashboard/models.py:14
msgid "user"
msgstr "کاربر"
#: dashboard/models.py:15
msgid "column"
msgstr "ستون"
#: dashboard/models.py:16
msgid "order"
msgstr "ترتیب"
#: dashboard/models.py:17
msgid "settings"
msgstr "تنظیمات"
#: dashboard/models.py:18
msgid "children"
msgstr "زیرگروه‌ها"
#: dashboard/models.py:19
msgid "collapsed"
msgstr "بازشده"
#: dashboard/models.py:22
msgid "user dashboard module"
msgstr "ماژول داشبورد کاربر"
#: dashboard/models.py:23
msgid "user dashboard modules"
msgstr "ماژول های داشبورد کاربر"
#: dashboard/modules.py:163
msgid "URL"
msgstr "نشانی‌ اینترنتی"
#: dashboard/modules.py:165
msgid "External link"
msgstr "لینک های خارجی"
#: dashboard/modules.py:169
msgid "Layout"
msgstr "چینش"
#: dashboard/modules.py:169
msgid "Stacked"
msgstr "پشته شدن"
#: dashboard/modules.py:169
msgid "Inline"
msgstr "درون خطی"
#: dashboard/modules.py:215 dashboard/modules.py:239
msgid "Links"
msgstr "لینک‌ها"
#: dashboard/modules.py:238
msgid "Link"
msgstr "لینک"
#: dashboard/modules.py:372
msgid "Models"
msgstr "مدل‌ها"
#: dashboard/modules.py:416 dashboard/modules.py:523
msgid "Items limit"
msgstr "محدوده آیتم‌ها"
#: dashboard/modules.py:524
msgid "Feed URL"
msgstr "نشانی فید"
#: dashboard/modules.py:555
msgid "RSS Feed"
msgstr "فید RSS"
#: dashboard/modules.py:601
msgid "You must install the FeedParser python module"
msgstr "ابتدا باید ماژول پایتونی FeedParser را نصب کنید"
#: dashboard/modules.py:606
msgid "You must provide a valid feed URL"
msgstr "ابتدا باید نشانی صحیح فید را وارد کنید"
#: dashboard/templates/jet.dashboard/dashboard.html:17
msgid "Delete widget"
msgstr "حذف ویجت"
#: dashboard/templates/jet.dashboard/dashboard.html:18
msgid "Are you sure want to delete this widget?"
msgstr "آیا میخواهید این ویجت حذف شود؟"
#: dashboard/templates/jet.dashboard/dashboard_tools.html:12
msgid "widgets"
msgstr "ویجت‌ها"
#: dashboard/templates/jet.dashboard/dashboard_tools.html:13
msgid "available"
msgstr "موجود"
#: dashboard/templates/jet.dashboard/dashboard_tools.html:18
msgid "initials"
msgstr "مقادیر اولیه"
#: dashboard/templates/jet.dashboard/dashboard_tools.html:23
#: dashboard/templates/jet.dashboard/modules/app_list.html:18
#: dashboard/templates/jet.dashboard/modules/model_list.html:8
msgid "Add"
msgstr "افزودن"
#: dashboard/templates/jet.dashboard/dashboard_tools.html:26
#: dashboard/templates/jet.dashboard/dashboard_tools.html:32
msgid "Reset widgets"
msgstr "بازنشانی ویجت‌ها"
#: dashboard/templates/jet.dashboard/dashboard_tools.html:33
msgid "Are you sure want to reset widgets?"
msgstr "آیا میخواهید ویجت ها بازنشانی شوند؟"
#: dashboard/templates/jet.dashboard/module.html:9
#: dashboard/templates/jet.dashboard/modules/app_list.html:24
#: dashboard/templates/jet.dashboard/modules/model_list.html:14
#: dashboard/views.py:94
msgid "Change"
msgstr "تغییر"
#: dashboard/templates/jet.dashboard/module.html:12
#: dashboard/templates/jet.dashboard/update_module.html:55
#: dashboard/templates/jet.dashboard/update_module.html:57
msgid "Delete"
msgstr "حذف"
#: dashboard/templates/jet.dashboard/modules/app_list.html:7
#: dashboard/templates/jet.dashboard/modules/app_list.html:10
#, python-format
msgid "Models in the %(name)s application"
msgstr "مدل‌ها در اپلیکیشن %(name)s "
#: dashboard/templates/jet.dashboard/modules/feed.html:13
#: dashboard/templates/jet.dashboard/modules/google_analytics_period_visitors.html:34
#: dashboard/templates/jet.dashboard/modules/google_analytics_visitors_chart.html:30
#: dashboard/templates/jet.dashboard/modules/google_analytics_visitors_totals.html:23
#: dashboard/templates/jet.dashboard/modules/link_list.html:26
#: dashboard/templates/jet.dashboard/modules/yandex_metrika_period_visitors.html:34
#: dashboard/templates/jet.dashboard/modules/yandex_metrika_visitors_chart.html:30
#: dashboard/templates/jet.dashboard/modules/yandex_metrika_visitors_totals.html:23
msgid "Nothing to show"
msgstr "چیزی برای نمایش وجود ندارد"
#: dashboard/templates/jet.dashboard/modules/google_analytics_period_visitors.html:14
#: dashboard/templates/jet.dashboard/modules/yandex_metrika_period_visitors.html:14
msgid "Date"
msgstr "تاریخ"
#: dashboard/templates/jet.dashboard/modules/recent_actions.html:6
msgid "None available"
msgstr "هیچکدام آماده نیست"
#: dashboard/templates/jet.dashboard/modules/recent_actions.html:30
msgid "Unknown content"
msgstr "محتوای ناشناخته"
#: dashboard/templates/jet.dashboard/update_module.html:7
msgid "Home"
msgstr "خانه"
#: dashboard/templates/jet.dashboard/update_module.html:25
msgid "Please correct the errors below."
msgstr "لطفا خطاهای زیر را برطرف نمایید."
#: dashboard/templates/jet.dashboard/update_module.html:69
#, python-format
msgid "Add another %(verbose_name)s"
msgstr "افزودن یک %(verbose_name)s دیگر"
#: dashboard/templates/jet.dashboard/update_module.html:81
msgid "Save"
msgstr "ذخیره"
#: dashboard/views.py:23
msgid "Widget was successfully updated"
msgstr "ویجت با موفقیت بروزرسانی شد"
#: dashboard/views.py:98 dashboard/views.py:99
msgid "Items"
msgstr "آیتم‌ها"
#: dashboard/views.py:165
msgid "Widget has been successfully added"
msgstr "ویجت با موفقیت افزوده شد"

View File

@@ -0,0 +1,30 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-09-11 12:44+0000\n"
"PO-Revision-Date: 2017-05-25 12:31+0430\n"
"Language: fa\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Last-Translator: Pyzenberg <pyzenberg@gmail.com>\n"
"Language-Team: \n"
"X-Generator: Poedit 1.8.9\n"
#: static/jet/js/src/features/dashboard.js:79
#: static/jet/js/src/features/dashboard.js:208
msgid "Cancel"
msgstr "لغو"
#: static/jet/js/src/features/dashboard.js:203
msgid "Delete"
msgstr "حذف"
#: static/jet/js/src/features/dashboard.js:74
msgid "Yes"
msgstr "بله"

View File

@@ -0,0 +1,391 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-12-28 13:32+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
#: dashboard/modules.py:138 templates/admin/base.html:281
msgid "URL"
msgstr ""
#: dashboard/dashboard.py:207
msgid "Quick links"
msgstr "Liens rapides"
#: dashboard/dashboard.py:213
msgid "Return to site"
msgstr "Retourner au site"
#: dashboard/dashboard.py:224 dashboard/modules.py:268
msgid "Applications"
msgstr ""
#: dashboard/dashboard.py:232
msgid "Administration"
msgstr ""
#: dashboard/dashboard.py:240 dashboard/modules.py:413
msgid "Recent Actions"
msgstr "Actions récentes"
#: dashboard/dashboard.py:248
msgid "Latest Django News"
msgstr "Dernières nouvelles de Django"
#: dashboard/dashboard.py:257
msgid "Support"
msgstr "Support"
#: dashboard/dashboard.py:260
msgid "Django documentation"
msgstr "Documentation de Django"
#: dashboard/dashboard.py:265
msgid "Django \"django-users\" mailing list"
msgstr "Mailing liste de Django \"django-users\""
#: dashboard/dashboard.py:270
msgid "Django irc channel"
msgstr "Canal IRC de Django"
#: dashboard/dashboard.py:285
msgid "Application models"
msgstr "Modèles d'application"
#: dashboard/models.py:11 dashboard/modules.py:139
msgid "Title"
msgstr "Titre"
#: dashboard/modules.py:140
msgid "External link"
msgstr "Lien externe"
#: dashboard/modules.py:144
msgid "Layout"
msgstr ""
#: dashboard/modules.py:144
msgid "Stacked"
msgstr ""
#: dashboard/modules.py:144
msgid "Inline"
msgstr ""
#: dashboard/modules.py:190 dashboard/modules.py:214
msgid "Links"
msgstr "Liens"
#: dashboard/modules.py:213
msgid "Link"
msgstr "Lien"
#: dashboard/modules.py:340
msgid "Models"
msgstr "Modèles"
#: dashboard/modules.py:383 dashboard/modules.py:490
msgid "Items limit"
msgstr "Limite de résultats"
#: dashboard/modules.py:491
msgid "Feed URL"
msgstr "URL du flux"
#: dashboard/modules.py:522
msgid "RSS Feed"
msgstr "Flux RSS"
#: dashboard/modules.py:568
msgid "You must install the FeedParser python module"
msgstr "Installation du module python FeedParser requis"
#: dashboard/modules.py:573
msgid "You must provide a valid feed URL"
msgstr "Merci de fournir une URL de feed valide"
#: dashboard/views.py:17
msgid "Widget was successfully updated"
msgstr "Greffon mit à jour avec succès"
#: dashboard/views.py:89 dashboard/views.py:90
msgid "Items"
msgstr "Résultats"
#: dashboard/views.py:152
msgid "Widget has been successfully added"
msgstr "Greffon ajouté avec succès"
#: dashboard/dashboard_modules/google_analytics.py:145
#: dashboard/dashboard_modules/yandex_metrika.py:102
msgid "Revoke access"
msgstr "Révoquer l'accès"
#: dashboard/dashboard_modules/google_analytics.py:150
#: dashboard/dashboard_modules/yandex_metrika.py:107
msgid "Grant access"
msgstr "Autoriser l'accès"
#: dashboard/dashboard_modules/google_analytics.py:163
#: dashboard/dashboard_modules/yandex_metrika.py:117
msgid "Access"
msgstr "Accès"
#: dashboard/dashboard_modules/google_analytics.py:164
#: dashboard/dashboard_modules/yandex_metrika.py:118
msgid "Counter"
msgstr "Compteur"
#: dashboard/dashboard_modules/google_analytics.py:165
#: dashboard/dashboard_modules/yandex_metrika.py:119
msgid "Statistics period"
msgstr "Période de statistiques"
#: dashboard/dashboard_modules/google_analytics.py:166
#: dashboard/dashboard_modules/yandex_metrika.py:120
msgid "Today"
msgstr "Aujourd'hui"
#: dashboard/dashboard_modules/google_analytics.py:167
#: dashboard/dashboard_modules/yandex_metrika.py:121
msgid "Last week"
msgstr "Dernière semaine"
#: dashboard/dashboard_modules/google_analytics.py:168
#: dashboard/dashboard_modules/yandex_metrika.py:122
msgid "Last month"
msgstr "Dernier mois"
#: dashboard/dashboard_modules/google_analytics.py:169
#: dashboard/dashboard_modules/yandex_metrika.py:123
msgid "Last quarter"
msgstr "Dernier trimestre"
#: dashboard/dashboard_modules/google_analytics.py:170
#: dashboard/dashboard_modules/yandex_metrika.py:124
msgid "Last year"
msgstr "L'an dernier"
#: dashboard/dashboard_modules/google_analytics.py:180
#: dashboard/dashboard_modules/yandex_metrika.py:134
msgid "none"
msgstr "aucun"
#: dashboard/dashboard_modules/google_analytics.py:183
#: dashboard/dashboard_modules/yandex_metrika.py:137
msgid "grant access first"
msgstr "autoriser l'accès préalablement"
#: dashboard/dashboard_modules/google_analytics.py:183
#: dashboard/dashboard_modules/yandex_metrika.py:137
msgid "counters loading failed"
msgstr "échec de chargement des compteurs"
#: dashboard/dashboard_modules/google_analytics.py:188
#: dashboard/dashboard_modules/yandex_metrika.py:142
msgid "Show"
msgstr "Voir"
#: dashboard/dashboard_modules/google_analytics.py:193
#: dashboard/dashboard_modules/google_analytics.py:201
#: dashboard/dashboard_modules/yandex_metrika.py:147
#: dashboard/dashboard_modules/yandex_metrika.py:155
msgid "Group"
msgstr "Groupe"
#: dashboard/dashboard_modules/google_analytics.py:194
#: dashboard/dashboard_modules/google_analytics.py:202
#: dashboard/dashboard_modules/yandex_metrika.py:148
#: dashboard/dashboard_modules/yandex_metrika.py:156
msgid "By day"
msgstr "Par jour"
#: dashboard/dashboard_modules/google_analytics.py:195
#: dashboard/dashboard_modules/google_analytics.py:203
#: dashboard/dashboard_modules/yandex_metrika.py:149
#: dashboard/dashboard_modules/yandex_metrika.py:157
msgid "By week"
msgstr "Par semaine"
#: dashboard/dashboard_modules/google_analytics.py:196
#: dashboard/dashboard_modules/google_analytics.py:204
#: dashboard/dashboard_modules/yandex_metrika.py:150
#: dashboard/dashboard_modules/yandex_metrika.py:158
msgid "By month"
msgstr "Par mois"
#: dashboard/dashboard_modules/google_analytics.py:277
#, python-format
msgid ""
"Please <a href=\"%s\">attach Google account and choose Google Analytics "
"counter</a> to start using widget"
msgstr ""
"Merci d'<a href=\"%s\">attacher un compte Google et choisir un compteur "
"Google Analytics</a> pour commencer à utiliser le greffon"
#: dashboard/dashboard_modules/google_analytics.py:280
#, python-format
msgid ""
"Please <a href=\"%s\">select Google Analytics counter</a> to start using "
"widget"
msgstr ""
"Merci de <a href=\"%s\">séléctionner un compteur Google Analytics</a> to "
"pour commencer à utiliser le greffon "
#: dashboard/dashboard_modules/google_analytics.py:299
#: dashboard/dashboard_modules/google_analytics_views.py:42
#: dashboard/dashboard_modules/yandex_metrika.py:236
#: dashboard/dashboard_modules/yandex_metrika_views.py:37
msgid "API request failed."
msgstr "Échec de requête API."
#: dashboard/dashboard_modules/google_analytics.py:301
#: dashboard/dashboard_modules/yandex_metrika.py:238
#, python-format
msgid " Try to <a href=\"%s\">revoke and grant access</a> again"
msgstr " Essayez de <a href=\"%s\">révoquer et autoriser l'accès</a> à nouveau"
#: dashboard/dashboard_modules/google_analytics.py:311
msgid "Google Analytics visitors totals"
msgstr "Total de visiteureuses Google Analytics"
#: dashboard/dashboard_modules/google_analytics.py:189
#: dashboard/templates/jet.dashboard/modules/google_analytics_period_visitors.html:15
#: dashboard/dashboard_modules/google_analytics.py:326
msgid "users"
msgstr "utilisateureuses"
#: dashboard/dashboard_modules/google_analytics.py:190
#: dashboard/templates/jet.dashboard/modules/google_analytics_period_visitors.html:16
#: dashboard/dashboard_modules/google_analytics.py:327
msgid "sessions"
msgstr ""
#: dashboard/dashboard_modules/google_analytics.py:191
#: dashboard/dashboard_modules/yandex_metrika.py:146
#: dashboard/templates/jet.dashboard/modules/google_analytics_period_visitors.html:17
#: dashboard/templates/jet.dashboard/modules/yandex_metrika_period_visitors.html:17
#: dashboard/dashboard_modules/google_analytics.py:328
#: dashboard/dashboard_modules/yandex_metrika.py:267
msgid "views"
msgstr "vues"
#: dashboard/dashboard_modules/google_analytics.py:330
#: dashboard/dashboard_modules/google_analytics.py:388
#: dashboard/dashboard_modules/google_analytics.py:438
#: dashboard/dashboard_modules/yandex_metrika.py:269
#: dashboard/dashboard_modules/yandex_metrika.py:321
#: dashboard/dashboard_modules/yandex_metrika.py:365
msgid "Bad server response"
msgstr "Réponse serveur invalide"
#: dashboard/dashboard_modules/google_analytics.py:340
msgid "Google Analytics visitors chart"
msgstr "Graphique visiteureuses Google Analytics"
#: dashboard/dashboard_modules/google_analytics.py:398
msgid "Google Analytics period visitors"
msgstr "Visiteureuses par période Google Analytics"
#: dashboard/dashboard_modules/google_analytics_views.py:26
#: dashboard/dashboard_modules/google_analytics_views.py:46
#: dashboard/dashboard_modules/yandex_metrika_views.py:23
#: dashboard/dashboard_modules/yandex_metrika_views.py:45
msgid "Module not found"
msgstr "Module non trouvé"
#: dashboard/dashboard_modules/google_analytics_views.py:44
#: dashboard/dashboard_modules/yandex_metrika_views.py:43
msgid "Bad arguments"
msgstr "Arguments invalides"
#: dashboard/dashboard_modules/yandex_metrika.py:219
#, python-format
msgid ""
"Please <a href=\"%s\">attach Yandex account and choose Yandex Metrika "
"counter</a> to start using widget"
msgstr ""
#: dashboard/dashboard_modules/yandex_metrika.py:222
#, python-format
msgid ""
"Please <a href=\"%s\">select Yandex Metrika counter</a> to start using widget"
msgstr ""
#: dashboard/dashboard_modules/yandex_metrika.py:250
msgid "Yandex Metrika visitors totals"
msgstr ""
#: dashboard/dashboard_modules/yandex_metrika.py:144
#: dashboard/templates/jet.dashboard/modules/yandex_metrika_period_visitors.html:15
#: dashboard/dashboard_modules/yandex_metrika.py:265
msgid "visitors"
msgstr "visiteureuses"
#: dashboard/dashboard_modules/yandex_metrika.py:145
#: dashboard/templates/jet.dashboard/modules/yandex_metrika_period_visitors.html:16
#: dashboard/dashboard_modules/yandex_metrika.py:266
msgid "visits"
msgstr "visites"
#: dashboard/dashboard_modules/yandex_metrika.py:279
msgid "Yandex Metrika visitors chart"
msgstr ""
#: dashboard/dashboard_modules/yandex_metrika.py:331
msgid "Yandex Metrika period visitors"
msgstr ""
#: dashboard/templates/jet.dashboard/dashboard.html:17
msgid "Delete widget"
msgstr "Éffacer le greffon"
#: dashboard/templates/jet.dashboard/dashboard.html:18
msgid "Are you sure want to delete this widget?"
msgstr "Voulez-vous vraiment éffacer ce greffon?"
#: dashboard/templates/jet.dashboard/dashboard_tools.html:7
msgid "widgets"
msgstr "greffons"
#: dashboard/templates/jet.dashboard/dashboard_tools.html:8
msgid "available"
msgstr "disponnible"
#: dashboard/templates/jet.dashboard/dashboard_tools.html:13
msgid "initials"
msgstr "initiaux"
#: dashboard/templates/jet.dashboard/dashboard_tools.html:21
#: dashboard/templates/jet.dashboard/dashboard_tools.html:27
msgid "Reset widgets"
msgstr "Réinitialiser les greffons"
#: dashboard/templates/jet.dashboard/dashboard_tools.html:28
msgid "Are you sure want to reset widgets?"
msgstr "Voulez-vous vraiment réinitialiser les gréffons?"
#: dashboard/templates/jet.dashboard/modules/feed.html:13
#: dashboard/templates/jet.dashboard/modules/google_analytics_period_visitors.html:34
#: dashboard/templates/jet.dashboard/modules/google_analytics_visitors_chart.html:30
#: dashboard/templates/jet.dashboard/modules/google_analytics_visitors_totals.html:23
#: dashboard/templates/jet.dashboard/modules/link_list.html:26
#: dashboard/templates/jet.dashboard/modules/yandex_metrika_period_visitors.html:34
#: dashboard/templates/jet.dashboard/modules/yandex_metrika_visitors_chart.html:30
#: dashboard/templates/jet.dashboard/modules/yandex_metrika_visitors_totals.html:23
msgid "Nothing to show"
msgstr "Rien à montrer"

View File

@@ -0,0 +1,28 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-09-11 12:44+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: static/jet/js/src/features/dashboard.js:79 static/jet/js/src/features/dashboard.js:208
msgid "Cancel"
msgstr "Annuler"
#: static/jet/js/src/features/dashboard.js:203
msgid "Delete"
msgstr "Éffacer"
#: static/jet/js/src/features/dashboard.js:74
msgid "Yes"
msgstr "Oui"

View File

@@ -0,0 +1,490 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-02-01 17:53+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
"|| n%100>=20) ? 1 : 2);\n"
#: jet/dashboard/dashboard.py:210
msgid "Quick links"
msgstr ""
#: jet/dashboard/dashboard.py:216
msgid "Return to site"
msgstr "Powrót na stronę"
#: jet/dashboard/dashboard.py:217
msgid "Change password"
msgstr "Zmień hasło"
#: jet/dashboard/dashboard.py:219
msgid "Log out"
msgstr "Wyloguj"
#: jet/dashboard/dashboard.py:227 jet/dashboard/modules.py:299
msgid "Applications"
msgstr "Aplikacje"
#: jet/dashboard/dashboard.py:235
msgid "Administration"
msgstr "Administracja"
#: jet/dashboard/dashboard.py:243 jet/dashboard/modules.py:446
msgid "Recent Actions"
msgstr "Ostatnie akcje"
#: jet/dashboard/dashboard.py:251
msgid "Latest Django News"
msgstr "Wiadomości o Django"
#: jet/dashboard/dashboard.py:260
msgid "Support"
msgstr "Wsparcie"
#: jet/dashboard/dashboard.py:263
msgid "Django documentation"
msgstr "Dokumentacja Django"
#: jet/dashboard/dashboard.py:268
msgid "Django \"django-users\" mailing list"
msgstr "Lista mailingowa Django"
#: jet/dashboard/dashboard.py:273
msgid "Django irc channel"
msgstr "Kanał IRC Django"
#: jet/dashboard/dashboard.py:288
msgid "Application models"
msgstr "Modele aplikacji"
#: jet/dashboard/dashboard_modules/google_analytics.py:145
#: jet/dashboard/dashboard_modules/yandex_metrika.py:103
msgid "Revoke access"
msgstr "Cofnij dostęp"
#: jet/dashboard/dashboard_modules/google_analytics.py:150
#: jet/dashboard/dashboard_modules/yandex_metrika.py:108
msgid "Grant access"
msgstr "Przyznaj dostęp"
#: jet/dashboard/dashboard_modules/google_analytics.py:163
#: jet/dashboard/dashboard_modules/yandex_metrika.py:118
msgid "Access"
msgstr "Dostęp"
#: jet/dashboard/dashboard_modules/google_analytics.py:164
#: jet/dashboard/dashboard_modules/yandex_metrika.py:119
msgid "Counter"
msgstr "Licznik"
#: jet/dashboard/dashboard_modules/google_analytics.py:165
#: jet/dashboard/dashboard_modules/yandex_metrika.py:120
msgid "Statistics period"
msgstr ""
#: jet/dashboard/dashboard_modules/google_analytics.py:166
#: jet/dashboard/dashboard_modules/yandex_metrika.py:121
msgid "Today"
msgstr "Dzisiaj"
#: jet/dashboard/dashboard_modules/google_analytics.py:167
#: jet/dashboard/dashboard_modules/yandex_metrika.py:122
msgid "Last week"
msgstr "Zeszły tydzień"
#: jet/dashboard/dashboard_modules/google_analytics.py:168
#: jet/dashboard/dashboard_modules/yandex_metrika.py:123
msgid "Last month"
msgstr "Zeszły miesiąc"
#: jet/dashboard/dashboard_modules/google_analytics.py:169
#: jet/dashboard/dashboard_modules/yandex_metrika.py:124
msgid "Last quarter"
msgstr "Zeszły kwartał"
#: jet/dashboard/dashboard_modules/google_analytics.py:170
#: jet/dashboard/dashboard_modules/yandex_metrika.py:125
msgid "Last year"
msgstr "Zeszły rok"
#: jet/dashboard/dashboard_modules/google_analytics.py:180
#: jet/dashboard/dashboard_modules/yandex_metrika.py:135
msgid "none"
msgstr "brak"
#: jet/dashboard/dashboard_modules/google_analytics.py:183
#: jet/dashboard/dashboard_modules/yandex_metrika.py:138
msgid "grant access first"
msgstr ""
#: jet/dashboard/dashboard_modules/google_analytics.py:183
#: jet/dashboard/dashboard_modules/yandex_metrika.py:138
msgid "counters loading failed"
msgstr "ładowanie liczników nie powiodło się"
#: jet/dashboard/dashboard_modules/google_analytics.py:188
#: jet/dashboard/dashboard_modules/yandex_metrika.py:143
msgid "Show"
msgstr "Pokaż"
#: jet/dashboard/dashboard_modules/google_analytics.py:189
#: jet/dashboard/dashboard_modules/google_analytics.py:326
#: jet/dashboard/templates/jet.dashboard/modules/google_analytics_period_visitors.html:15
msgid "users"
msgstr "użytkownicy"
#: jet/dashboard/dashboard_modules/google_analytics.py:190
#: jet/dashboard/dashboard_modules/google_analytics.py:327
#: jet/dashboard/templates/jet.dashboard/modules/google_analytics_period_visitors.html:16
msgid "sessions"
msgstr "sesje"
#: jet/dashboard/dashboard_modules/google_analytics.py:191
#: jet/dashboard/dashboard_modules/google_analytics.py:328
#: jet/dashboard/dashboard_modules/yandex_metrika.py:146
#: jet/dashboard/dashboard_modules/yandex_metrika.py:267
#: jet/dashboard/templates/jet.dashboard/modules/google_analytics_period_visitors.html:17
#: jet/dashboard/templates/jet.dashboard/modules/yandex_metrika_period_visitors.html:17
msgid "views"
msgstr "wyświetlenia"
#: jet/dashboard/dashboard_modules/google_analytics.py:193
#: jet/dashboard/dashboard_modules/google_analytics.py:201
#: jet/dashboard/dashboard_modules/yandex_metrika.py:148
#: jet/dashboard/dashboard_modules/yandex_metrika.py:156
msgid "Group"
msgstr "Groupa"
#: jet/dashboard/dashboard_modules/google_analytics.py:194
#: jet/dashboard/dashboard_modules/google_analytics.py:202
#: jet/dashboard/dashboard_modules/yandex_metrika.py:149
#: jet/dashboard/dashboard_modules/yandex_metrika.py:157
msgid "By day"
msgstr ""
#: jet/dashboard/dashboard_modules/google_analytics.py:195
#: jet/dashboard/dashboard_modules/google_analytics.py:203
#: jet/dashboard/dashboard_modules/yandex_metrika.py:150
#: jet/dashboard/dashboard_modules/yandex_metrika.py:158
msgid "By week"
msgstr ""
#: jet/dashboard/dashboard_modules/google_analytics.py:196
#: jet/dashboard/dashboard_modules/google_analytics.py:204
#: jet/dashboard/dashboard_modules/yandex_metrika.py:151
#: jet/dashboard/dashboard_modules/yandex_metrika.py:159
msgid "By month"
msgstr ""
#: jet/dashboard/dashboard_modules/google_analytics.py:277
#, python-format
msgid ""
"Please <a href=\"%s\">attach Google account and choose Google Analytics "
"counter</a> to start using widget"
msgstr ""
#: jet/dashboard/dashboard_modules/google_analytics.py:280
#, python-format
msgid ""
"Please <a href=\"%s\">select Google Analytics counter</a> to start using "
"widget"
msgstr ""
#: jet/dashboard/dashboard_modules/google_analytics.py:299
#: jet/dashboard/dashboard_modules/google_analytics_views.py:42
#: jet/dashboard/dashboard_modules/yandex_metrika.py:236
#: jet/dashboard/dashboard_modules/yandex_metrika_views.py:37
msgid "API request failed."
msgstr "Zapytanie do API nie powiodło się"
#: jet/dashboard/dashboard_modules/google_analytics.py:301
#: jet/dashboard/dashboard_modules/yandex_metrika.py:238
#, python-format
msgid " Try to <a href=\"%s\">revoke and grant access</a> again"
msgstr ""
#: jet/dashboard/dashboard_modules/google_analytics.py:311
msgid "Google Analytics visitors totals"
msgstr ""
#: jet/dashboard/dashboard_modules/google_analytics.py:330
#: jet/dashboard/dashboard_modules/google_analytics.py:388
#: jet/dashboard/dashboard_modules/google_analytics.py:438
#: jet/dashboard/dashboard_modules/yandex_metrika.py:269
#: jet/dashboard/dashboard_modules/yandex_metrika.py:321
#: jet/dashboard/dashboard_modules/yandex_metrika.py:365
msgid "Bad server response"
msgstr "Niepoprawna odpowiedź serwera"
#: jet/dashboard/dashboard_modules/google_analytics.py:340
msgid "Google Analytics visitors chart"
msgstr ""
#: jet/dashboard/dashboard_modules/google_analytics.py:398
msgid "Google Analytics period visitors"
msgstr ""
#: jet/dashboard/dashboard_modules/google_analytics_views.py:26
#: jet/dashboard/dashboard_modules/google_analytics_views.py:46
#: jet/dashboard/dashboard_modules/yandex_metrika_views.py:23
#: jet/dashboard/dashboard_modules/yandex_metrika_views.py:45
msgid "Module not found"
msgstr "Nie znaleziono modułu"
#: jet/dashboard/dashboard_modules/google_analytics_views.py:44
#: jet/dashboard/dashboard_modules/yandex_metrika_views.py:43
msgid "Bad arguments"
msgstr "Niepoprawne argumenty"
#: jet/dashboard/dashboard_modules/yandex_metrika.py:144
#: jet/dashboard/dashboard_modules/yandex_metrika.py:265
#: jet/dashboard/templates/jet.dashboard/modules/yandex_metrika_period_visitors.html:15
msgid "visitors"
msgstr "goście"
#: jet/dashboard/dashboard_modules/yandex_metrika.py:145
#: jet/dashboard/dashboard_modules/yandex_metrika.py:266
#: jet/dashboard/templates/jet.dashboard/modules/yandex_metrika_period_visitors.html:16
msgid "visits"
msgstr "odwiedzenia"
#: jet/dashboard/dashboard_modules/yandex_metrika.py:219
#, python-format
msgid ""
"Please <a href=\"%s\">attach Yandex account and choose Yandex Metrika "
"counter</a> to start using widget"
msgstr ""
#: jet/dashboard/dashboard_modules/yandex_metrika.py:222
#, python-format
msgid ""
"Please <a href=\"%s\">select Yandex Metrika counter</a> to start using widget"
msgstr ""
#: jet/dashboard/dashboard_modules/yandex_metrika.py:250
msgid "Yandex Metrika visitors totals"
msgstr ""
#: jet/dashboard/dashboard_modules/yandex_metrika.py:279
msgid "Yandex Metrika visitors chart"
msgstr ""
#: jet/dashboard/dashboard_modules/yandex_metrika.py:331
msgid "Yandex Metrika period visitors"
msgstr ""
#: jet/dashboard/models.py:11 jet/dashboard/modules.py:164
msgid "Title"
msgstr "Tytuł"
#: jet/dashboard/models.py:12
msgid "module"
msgstr "moduł"
#: jet/dashboard/models.py:13
msgid "application name"
msgstr "nazwa aplikacji"
#: jet/dashboard/models.py:14
msgid "user"
msgstr "użytkownik"
#: jet/dashboard/models.py:15
msgid "column"
msgstr "kolumna"
#: jet/dashboard/models.py:16
msgid "order"
msgstr "kolejność"
#: jet/dashboard/models.py:17
msgid "settings"
msgstr "ustawienia"
#: jet/dashboard/models.py:18
msgid "children"
msgstr "dzieci"
#: jet/dashboard/models.py:19
msgid "collapsed"
msgstr ""
#: jet/dashboard/models.py:22
msgid "user dashboard module"
msgstr "moduł panelu użytkowika"
#: jet/dashboard/models.py:23
msgid "user dashboard modules"
msgstr "moduły panelu użytkowika"
#: jet/dashboard/modules.py:163
msgid "URL"
msgstr "Adres URL"
#: jet/dashboard/modules.py:165
msgid "External link"
msgstr "Link zewnętrzny"
#: jet/dashboard/modules.py:169
msgid "Layout"
msgstr "Układ"
#: jet/dashboard/modules.py:169
msgid "Stacked"
msgstr ""
#: jet/dashboard/modules.py:169
msgid "Inline"
msgstr ""
#: jet/dashboard/modules.py:215 jet/dashboard/modules.py:239
msgid "Links"
msgstr ""
#: jet/dashboard/modules.py:238
msgid "Link"
msgstr ""
#: jet/dashboard/modules.py:372
msgid "Models"
msgstr "Modele"
#: jet/dashboard/modules.py:416 jet/dashboard/modules.py:523
msgid "Items limit"
msgstr "Limit pozycji"
#: jet/dashboard/modules.py:524
msgid "Feed URL"
msgstr "RSS URL"
#: jet/dashboard/modules.py:555
msgid "RSS Feed"
msgstr "Kanał RSS"
#: jet/dashboard/modules.py:601
msgid "You must install the FeedParser python module"
msgstr "Zainstaluj moduł FeedParser w pythonie"
#: jet/dashboard/modules.py:606
msgid "You must provide a valid feed URL"
msgstr "Podaj prawidłowy adres URL"
#: jet/dashboard/templates/jet.dashboard/dashboard.html:17
msgid "Delete widget"
msgstr "Usuń widget"
#: jet/dashboard/templates/jet.dashboard/dashboard.html:18
msgid "Are you sure want to delete this widget?"
msgstr "Czy jesteś pewien że chcesz usunąć ten widget"
#: jet/dashboard/templates/jet.dashboard/dashboard_tools.html:12
msgid "widgets"
msgstr ""
#: jet/dashboard/templates/jet.dashboard/dashboard_tools.html:13
msgid "available"
msgstr "dostępny"
#: jet/dashboard/templates/jet.dashboard/dashboard_tools.html:18
msgid "initials"
msgstr "inicjały"
#: jet/dashboard/templates/jet.dashboard/dashboard_tools.html:23
#: jet/dashboard/templates/jet.dashboard/modules/app_list.html:18
#: jet/dashboard/templates/jet.dashboard/modules/model_list.html:8
msgid "Add"
msgstr "Dodaj"
#: jet/dashboard/templates/jet.dashboard/dashboard_tools.html:26
#: jet/dashboard/templates/jet.dashboard/dashboard_tools.html:32
msgid "Reset widgets"
msgstr "Resetuj widżety"
#: jet/dashboard/templates/jet.dashboard/dashboard_tools.html:33
msgid "Are you sure want to reset widgets?"
msgstr "Czy jesteś pewien że chcesz zrestartować widgety?"
#: jet/dashboard/templates/jet.dashboard/module.html:9
#: jet/dashboard/templates/jet.dashboard/modules/app_list.html:24
#: jet/dashboard/templates/jet.dashboard/modules/model_list.html:14
#: jet/dashboard/views.py:90
msgid "Change"
msgstr "Zmiana"
#: jet/dashboard/templates/jet.dashboard/module.html:12
#: jet/dashboard/templates/jet.dashboard/update_module.html:55
#: jet/dashboard/templates/jet.dashboard/update_module.html:57
msgid "Delete"
msgstr "Usuń"
#: jet/dashboard/templates/jet.dashboard/modules/app_list.html:7
#: jet/dashboard/templates/jet.dashboard/modules/app_list.html:10
#, python-format
msgid "Models in the %(name)s application"
msgstr "Modele w aplikacji %(name)s"
#: jet/dashboard/templates/jet.dashboard/modules/feed.html:13
#: jet/dashboard/templates/jet.dashboard/modules/google_analytics_period_visitors.html:34
#: jet/dashboard/templates/jet.dashboard/modules/google_analytics_visitors_chart.html:30
#: jet/dashboard/templates/jet.dashboard/modules/google_analytics_visitors_totals.html:23
#: jet/dashboard/templates/jet.dashboard/modules/link_list.html:26
#: jet/dashboard/templates/jet.dashboard/modules/yandex_metrika_period_visitors.html:34
#: jet/dashboard/templates/jet.dashboard/modules/yandex_metrika_visitors_chart.html:30
#: jet/dashboard/templates/jet.dashboard/modules/yandex_metrika_visitors_totals.html:23
msgid "Nothing to show"
msgstr "Brak danych do wyświetlenia"
#: jet/dashboard/templates/jet.dashboard/modules/google_analytics_period_visitors.html:14
#: jet/dashboard/templates/jet.dashboard/modules/yandex_metrika_period_visitors.html:14
msgid "Date"
msgstr "Data"
#: jet/dashboard/templates/jet.dashboard/modules/recent_actions.html:6
msgid "None available"
msgstr "Brak dostępnych akcji"
#: jet/dashboard/templates/jet.dashboard/modules/recent_actions.html:30
msgid "Unknown content"
msgstr ""
#: jet/dashboard/templates/jet.dashboard/update_module.html:7
msgid "Home"
msgstr "Strona główna"
#: jet/dashboard/templates/jet.dashboard/update_module.html:25
msgid "Please correct the errors below."
msgstr "Proszę popraw poniższe błędy"
#: jet/dashboard/templates/jet.dashboard/update_module.html:69
#, python-format
msgid "Add another %(verbose_name)s"
msgstr "Dodaj kolejny %(verbose_name)s"
#: jet/dashboard/templates/jet.dashboard/update_module.html:81
msgid "Save"
msgstr "Zapisz"
#: jet/dashboard/views.py:19
msgid "Widget was successfully updated"
msgstr "Widget został pomyślnie zaktualizowany"
#: jet/dashboard/views.py:94 jet/dashboard/views.py:95
msgid "Items"
msgstr "Pozycje"
#: jet/dashboard/views.py:161
msgid "Widget has been successfully added"
msgstr "Widget został pomyślnie dodany"

View File

@@ -0,0 +1,393 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-09-21 10:34-0300\n"
"PO-Revision-Date: 2016-09-21 10:34-0300\n"
"Last-Translator: Allan george <mord4z@gmail.com>\n"
"Language: pt_BR\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 "
"&& (n%100<10 || n%100>=20) ? 1 : 2);\n"
"Language-Team: \n"
"X-Generator: Poedit 1.8.9\n"
#: dashboard/modules.py:138 templates/admin/base.html:281
msgid "URL"
msgstr "URL"
#: dashboard/dashboard.py:207
msgid "Quick links"
msgstr "Atalhos"
#: dashboard/dashboard.py:213
msgid "Return to site"
msgstr "Voltar ao site"
#: dashboard/dashboard.py:224 dashboard/modules.py:268
msgid "Applications"
msgstr "Aplicativos"
#: dashboard/dashboard.py:232
msgid "Administration"
msgstr "Administração"
#: dashboard/dashboard.py:240 dashboard/modules.py:413
msgid "Recent Actions"
msgstr "Ações Recentes"
#: dashboard/dashboard.py:248
msgid "Latest Django News"
msgstr "Últimas notícias do Django"
#: dashboard/dashboard.py:257
msgid "Support"
msgstr "Suporte"
#: dashboard/dashboard.py:260
msgid "Django documentation"
msgstr "Documentação do Django"
#: dashboard/dashboard.py:265
msgid "Django \"django-users\" mailing list"
msgstr "Lista de discussão de Django \"django-usuários\""
#: dashboard/dashboard.py:270
msgid "Django irc channel"
msgstr "Canal irc do Django"
#: dashboard/dashboard.py:285
msgid "Application models"
msgstr "Aplicativos"
#: dashboard/models.py:11 dashboard/modules.py:139
msgid "Title"
msgstr "Título"
#: dashboard/modules.py:140
msgid "External link"
msgstr "Link Externo"
#: dashboard/modules.py:144
msgid "Layout"
msgstr "Layout"
#: dashboard/modules.py:144
msgid "Stacked"
msgstr "Empilhado"
#: dashboard/modules.py:144
msgid "Inline"
msgstr "Em linha"
#: dashboard/modules.py:190 dashboard/modules.py:214
msgid "Links"
msgstr "Links"
#: dashboard/modules.py:213
msgid "Link"
msgstr "Link"
#: dashboard/modules.py:340
msgid "Models"
msgstr "Models"
#: dashboard/modules.py:383 dashboard/modules.py:490
msgid "Items limit"
msgstr "Limite de itens"
#: dashboard/modules.py:491
msgid "Feed URL"
msgstr "URL de Feed"
#: dashboard/modules.py:522
msgid "RSS Feed"
msgstr "Feed RSS"
#: dashboard/modules.py:568
msgid "You must install the FeedParser python module"
msgstr "Você deve instalar o módulo FeedParser"
#: dashboard/modules.py:573
msgid "You must provide a valid feed URL"
msgstr "Você deve informar uma URL de feed válida"
#: dashboard/views.py:17
msgid "Widget was successfully updated"
msgstr "Widget atualizado com sucesso"
#: dashboard/views.py:89 dashboard/views.py:90
msgid "Items"
msgstr "Itens"
#: dashboard/views.py:152
msgid "Widget has been successfully added"
msgstr "Widget adicionado com sucesso"
#: dashboard/dashboard_modules/google_analytics.py:145
#: dashboard/dashboard_modules/yandex_metrika.py:102
msgid "Revoke access"
msgstr "Revogar acesso"
#: dashboard/dashboard_modules/google_analytics.py:150
#: dashboard/dashboard_modules/yandex_metrika.py:107
msgid "Grant access"
msgstr "Permitir acesso"
#: dashboard/dashboard_modules/google_analytics.py:163
#: dashboard/dashboard_modules/yandex_metrika.py:117
msgid "Access"
msgstr "Acesso"
#: dashboard/dashboard_modules/google_analytics.py:164
#: dashboard/dashboard_modules/yandex_metrika.py:118
msgid "Counter"
msgstr "Contador"
#: dashboard/dashboard_modules/google_analytics.py:165
#: dashboard/dashboard_modules/yandex_metrika.py:119
msgid "Statistics period"
msgstr "Período de Estatísticas"
#: dashboard/dashboard_modules/google_analytics.py:166
#: dashboard/dashboard_modules/yandex_metrika.py:120
msgid "Today"
msgstr "Hoje"
#: dashboard/dashboard_modules/google_analytics.py:167
#: dashboard/dashboard_modules/yandex_metrika.py:121
msgid "Last week"
msgstr "Última semana"
#: dashboard/dashboard_modules/google_analytics.py:168
#: dashboard/dashboard_modules/yandex_metrika.py:122
msgid "Last month"
msgstr "Último mês"
#: dashboard/dashboard_modules/google_analytics.py:169
#: dashboard/dashboard_modules/yandex_metrika.py:123
msgid "Last quarter"
msgstr "Último trimestre"
#: dashboard/dashboard_modules/google_analytics.py:170
#: dashboard/dashboard_modules/yandex_metrika.py:124
msgid "Last year"
msgstr "Último ano"
#: dashboard/dashboard_modules/google_analytics.py:180
#: dashboard/dashboard_modules/yandex_metrika.py:134
msgid "none"
msgstr "nenhum"
#: dashboard/dashboard_modules/google_analytics.py:183
#: dashboard/dashboard_modules/yandex_metrika.py:137
msgid "grant access first"
msgstr "conceder acesso antes"
#: dashboard/dashboard_modules/google_analytics.py:183
#: dashboard/dashboard_modules/yandex_metrika.py:137
msgid "counters loading failed"
msgstr "carregamento do contador falhou"
#: dashboard/dashboard_modules/google_analytics.py:188
#: dashboard/dashboard_modules/yandex_metrika.py:142
msgid "Show"
msgstr "Exibir"
#: dashboard/dashboard_modules/google_analytics.py:193
#: dashboard/dashboard_modules/google_analytics.py:201
#: dashboard/dashboard_modules/yandex_metrika.py:147
#: dashboard/dashboard_modules/yandex_metrika.py:155
msgid "Group"
msgstr "Grupo"
#: dashboard/dashboard_modules/google_analytics.py:194
#: dashboard/dashboard_modules/google_analytics.py:202
#: dashboard/dashboard_modules/yandex_metrika.py:148
#: dashboard/dashboard_modules/yandex_metrika.py:156
msgid "By day"
msgstr "Por dia"
#: dashboard/dashboard_modules/google_analytics.py:195
#: dashboard/dashboard_modules/google_analytics.py:203
#: dashboard/dashboard_modules/yandex_metrika.py:149
#: dashboard/dashboard_modules/yandex_metrika.py:157
msgid "By week"
msgstr "Por semana"
#: dashboard/dashboard_modules/google_analytics.py:196
#: dashboard/dashboard_modules/google_analytics.py:204
#: dashboard/dashboard_modules/yandex_metrika.py:150
#: dashboard/dashboard_modules/yandex_metrika.py:158
msgid "By month"
msgstr "Por mês"
#: dashboard/dashboard_modules/google_analytics.py:277
#, python-format
msgid ""
"Please <a href=\"%s\">attach Google account and choose Google Analytics counter</"
"a> to start using widget"
msgstr ""
"Por favor <a href=\"%s\"> anexe uma conta do Google e selecione contadorGoogle "
"Analytics</a> para usar o widget "
#: dashboard/dashboard_modules/google_analytics.py:280
#, python-format
msgid ""
"Please <a href=\"%s\">select Google Analytics counter</a> to start using widget"
msgstr ""
"Por favor <a href=\"%s\">selecione contador google Analytics</a> para usar o "
"widget"
#: dashboard/dashboard_modules/google_analytics.py:299
#: dashboard/dashboard_modules/google_analytics_views.py:42
#: dashboard/dashboard_modules/yandex_metrika.py:236
#: dashboard/dashboard_modules/yandex_metrika_views.py:37
msgid "API request failed."
msgstr "Requisição da API falhou"
#: dashboard/dashboard_modules/google_analytics.py:301
#: dashboard/dashboard_modules/yandex_metrika.py:238
#, python-format
msgid " Try to <a href=\"%s\">revoke and grant access</a> again"
msgstr "Tente <a href=\"%s\">revogar e conceder acesso</a> novamente"
#: dashboard/dashboard_modules/google_analytics.py:311
msgid "Google Analytics visitors totals"
msgstr "Total de visitantes pelo Google Analytics"
#: dashboard/dashboard_modules/google_analytics.py:189
#: dashboard/templates/jet.dashboard/modules/google_analytics_period_visitors.html:15
#: dashboard/dashboard_modules/google_analytics.py:326
msgid "users"
msgstr "usuários"
#: dashboard/dashboard_modules/google_analytics.py:190
#: dashboard/templates/jet.dashboard/modules/google_analytics_period_visitors.html:16
#: dashboard/dashboard_modules/google_analytics.py:327
msgid "sessions"
msgstr "sessões"
#: dashboard/dashboard_modules/google_analytics.py:191
#: dashboard/dashboard_modules/yandex_metrika.py:146
#: dashboard/templates/jet.dashboard/modules/google_analytics_period_visitors.html:17
#: dashboard/templates/jet.dashboard/modules/yandex_metrika_period_visitors.html:17
#: dashboard/dashboard_modules/google_analytics.py:328
#: dashboard/dashboard_modules/yandex_metrika.py:267
msgid "views"
msgstr "views"
#: dashboard/dashboard_modules/google_analytics.py:330
#: dashboard/dashboard_modules/google_analytics.py:388
#: dashboard/dashboard_modules/google_analytics.py:438
#: dashboard/dashboard_modules/yandex_metrika.py:269
#: dashboard/dashboard_modules/yandex_metrika.py:321
#: dashboard/dashboard_modules/yandex_metrika.py:365
msgid "Bad server response"
msgstr "Resposta ruim do servidor"
#: dashboard/dashboard_modules/google_analytics.py:340
msgid "Google Analytics visitors chart"
msgstr "Gráfico de visitantes Google Analytics"
#: dashboard/dashboard_modules/google_analytics.py:398
msgid "Google Analytics period visitors"
msgstr "Período de visitas Google Analytics"
#: dashboard/dashboard_modules/google_analytics_views.py:26
#: dashboard/dashboard_modules/google_analytics_views.py:46
#: dashboard/dashboard_modules/yandex_metrika_views.py:23
#: dashboard/dashboard_modules/yandex_metrika_views.py:45
msgid "Module not found"
msgstr "Módulo não encontrado"
#: dashboard/dashboard_modules/google_analytics_views.py:44
#: dashboard/dashboard_modules/yandex_metrika_views.py:43
msgid "Bad arguments"
msgstr "Argumentos ruins"
#: dashboard/dashboard_modules/yandex_metrika.py:219
#, python-format
msgid ""
"Please <a href=\"%s\">attach Yandex account and choose Yandex Metrika counter</"
"a> to start using widget"
msgstr ""
"Por favor <a href=\"%s\">anexe uma conta Yandex e selecione contador Yandex "
"Metrika</a> para usar o widget"
#: dashboard/dashboard_modules/yandex_metrika.py:222
#, python-format
msgid ""
"Please <a href=\"%s\">select Yandex Metrika counter</a> to start using widget"
msgstr ""
"Por favor <a href=\"%s\">selecione contador Yandex Metrika</a> para usar o widget"
#: dashboard/dashboard_modules/yandex_metrika.py:250
msgid "Yandex Metrika visitors totals"
msgstr "Totais de visitantes Yandex Metrika"
#: dashboard/dashboard_modules/yandex_metrika.py:144
#: dashboard/templates/jet.dashboard/modules/yandex_metrika_period_visitors.html:15
#: dashboard/dashboard_modules/yandex_metrika.py:265
msgid "visitors"
msgstr "visitantes"
#: dashboard/dashboard_modules/yandex_metrika.py:145
#: dashboard/templates/jet.dashboard/modules/yandex_metrika_period_visitors.html:16
#: dashboard/dashboard_modules/yandex_metrika.py:266
msgid "visits"
msgstr "visitas"
#: dashboard/dashboard_modules/yandex_metrika.py:279
msgid "Yandex Metrika visitors chart"
msgstr "Gráfico de visitantes Yandex Metrika"
#: dashboard/dashboard_modules/yandex_metrika.py:331
msgid "Yandex Metrika period visitors"
msgstr "Visitantes no período Yandex Metrika"
#: dashboard/templates/jet.dashboard/dashboard.html:17
msgid "Delete widget"
msgstr "Deletar widget"
#: dashboard/templates/jet.dashboard/dashboard.html:18
msgid "Are you sure want to delete this widget?"
msgstr "Tem certeza que deseja deletar este widget?"
#: dashboard/templates/jet.dashboard/dashboard_tools.html:7
msgid "widgets"
msgstr "widgets"
#: dashboard/templates/jet.dashboard/dashboard_tools.html:8
msgid "available"
msgstr "disponível"
#: dashboard/templates/jet.dashboard/dashboard_tools.html:13
msgid "initials"
msgstr "iniciais"
#: dashboard/templates/jet.dashboard/dashboard_tools.html:21
#: dashboard/templates/jet.dashboard/dashboard_tools.html:27
msgid "Reset widgets"
msgstr "Reiniciar widgets"
#: dashboard/templates/jet.dashboard/dashboard_tools.html:28
msgid "Are you sure want to reset widgets?"
msgstr "Tem certeza que deseja reiniciar os widgets?"
#: dashboard/templates/jet.dashboard/modules/feed.html:13
#: dashboard/templates/jet.dashboard/modules/google_analytics_period_visitors.html:34
#: dashboard/templates/jet.dashboard/modules/google_analytics_visitors_chart.html:30
#: dashboard/templates/jet.dashboard/modules/google_analytics_visitors_totals.html:23
#: dashboard/templates/jet.dashboard/modules/link_list.html:26
#: dashboard/templates/jet.dashboard/modules/yandex_metrika_period_visitors.html:34
#: dashboard/templates/jet.dashboard/modules/yandex_metrika_visitors_chart.html:30
#: dashboard/templates/jet.dashboard/modules/yandex_metrika_visitors_totals.html:23
msgid "Nothing to show"
msgstr "Nada para exibir"

View File

@@ -0,0 +1,28 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-09-11 12:44+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Allan george <mord4z@gmail.com>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: Brazilian Portuguese\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: static/jet/js/src/features/dashboard.js:79 static/jet/js/src/features/dashboard.js:208
msgid "Cancel"
msgstr "Cancelar"
#: static/jet/js/src/features/dashboard.js:203
msgid "Delete"
msgstr "Deletar"
#: static/jet/js/src/features/dashboard.js:74
msgid "Yes"
msgstr "Sim"

View File

@@ -0,0 +1,392 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-12-28 13:32+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
#: dashboard/modules.py:138 templates/admin/base.html:281
msgid "URL"
msgstr "URL"
#: dashboard/dashboard.py:207
msgid "Quick links"
msgstr "Быстрые ссылки"
#: dashboard/dashboard.py:213
msgid "Return to site"
msgstr "Вернуться на сайт"
#: dashboard/dashboard.py:224 dashboard/modules.py:268
msgid "Applications"
msgstr "Приложения"
#: dashboard/dashboard.py:232
msgid "Administration"
msgstr "Администрирование"
#: dashboard/dashboard.py:240 dashboard/modules.py:413
msgid "Recent Actions"
msgstr "Последние действия"
#: dashboard/dashboard.py:248
msgid "Latest Django News"
msgstr "Новости от Django"
#: dashboard/dashboard.py:257
msgid "Support"
msgstr "Поддержка"
#: dashboard/dashboard.py:260
msgid "Django documentation"
msgstr "Документация по Django"
#: dashboard/dashboard.py:265
msgid "Django \"django-users\" mailing list"
msgstr "Гугл-группа \"django-users\""
#: dashboard/dashboard.py:270
msgid "Django irc channel"
msgstr "IRC канал Django"
#: dashboard/dashboard.py:285
msgid "Application models"
msgstr "Модели приложения"
#: dashboard/models.py:11 dashboard/modules.py:139
msgid "Title"
msgstr "Название"
#: dashboard/modules.py:140
msgid "External link"
msgstr "Внешняя ссылка"
#: dashboard/modules.py:144
msgid "Layout"
msgstr "Отображение"
#: dashboard/modules.py:144
msgid "Stacked"
msgstr "Списком"
#: dashboard/modules.py:144
msgid "Inline"
msgstr "В строчку"
#: dashboard/modules.py:190 dashboard/modules.py:214
msgid "Links"
msgstr "Ссылки"
#: dashboard/modules.py:213
msgid "Link"
msgstr "Ссылка"
#: dashboard/modules.py:340
msgid "Models"
msgstr "Модели"
#: dashboard/modules.py:383 dashboard/modules.py:490
msgid "Items limit"
msgstr "Количество элементов"
#: dashboard/modules.py:491
msgid "Feed URL"
msgstr "URL потока"
#: dashboard/modules.py:522
msgid "RSS Feed"
msgstr "RSS поток"
#: dashboard/modules.py:568
msgid "You must install the FeedParser python module"
msgstr "Необходимо установить python модуль FeedParser"
#: dashboard/modules.py:573
msgid "You must provide a valid feed URL"
msgstr "Необходимо указать корректный URL потока"
#: dashboard/views.py:17
msgid "Widget was successfully updated"
msgstr "Виджет успешно изменен"
#: dashboard/views.py:89 dashboard/views.py:90
msgid "Items"
msgstr "Элементы"
#: dashboard/views.py:152
msgid "Widget has been successfully added"
msgstr "Виджет успешно добавлен"
#: dashboard/dashboard_modules/google_analytics.py:145
#: dashboard/dashboard_modules/yandex_metrika.py:103
msgid "Revoke access"
msgstr "Убрать доступ"
#: dashboard/dashboard_modules/google_analytics.py:150
#: dashboard/dashboard_modules/yandex_metrika.py:108
msgid "Grant access"
msgstr "Предоставить доступ"
#: dashboard/dashboard_modules/google_analytics.py:163
#: dashboard/dashboard_modules/yandex_metrika.py:118
msgid "Access"
msgstr "Доступ"
#: dashboard/dashboard_modules/google_analytics.py:164
#: dashboard/dashboard_modules/yandex_metrika.py:119
msgid "Counter"
msgstr "Счетчик"
#: dashboard/dashboard_modules/google_analytics.py:165
#: dashboard/dashboard_modules/yandex_metrika.py:120
msgid "Statistics period"
msgstr "Статистика за период"
#: dashboard/dashboard_modules/google_analytics.py:166
#: dashboard/dashboard_modules/yandex_metrika.py:121
msgid "Today"
msgstr "Сегодня"
#: dashboard/dashboard_modules/google_analytics.py:167
#: dashboard/dashboard_modules/yandex_metrika.py:122
msgid "Last week"
msgstr "Последняя неделя"
#: dashboard/dashboard_modules/google_analytics.py:168
#: dashboard/dashboard_modules/yandex_metrika.py:123
msgid "Last month"
msgstr "Последний месяц"
#: dashboard/dashboard_modules/google_analytics.py:169
#: dashboard/dashboard_modules/yandex_metrika.py:124
msgid "Last quarter"
msgstr "Последний квартал"
#: dashboard/dashboard_modules/google_analytics.py:170
#: dashboard/dashboard_modules/yandex_metrika.py:125
msgid "Last year"
msgstr "Последний год"
#: dashboard/dashboard_modules/google_analytics.py:180
#: dashboard/dashboard_modules/yandex_metrika.py:135
msgid "none"
msgstr "не указано"
#: dashboard/dashboard_modules/google_analytics.py:183
#: dashboard/dashboard_modules/yandex_metrika.py:138
msgid "grant access first"
msgstr "сначала предоставьте доступ"
#: dashboard/dashboard_modules/google_analytics.py:183
#: dashboard/dashboard_modules/yandex_metrika.py:138
msgid "counters loading failed"
msgstr "не удалось загрузить счетчики"
#: dashboard/dashboard_modules/google_analytics.py:188
#: dashboard/dashboard_modules/yandex_metrika.py:143
msgid "Show"
msgstr "Показывать"
#: dashboard/dashboard_modules/google_analytics.py:193
#: dashboard/dashboard_modules/google_analytics.py:201
#: dashboard/dashboard_modules/yandex_metrika.py:148
#: dashboard/dashboard_modules/yandex_metrika.py:156
msgid "Group"
msgstr "Группировать"
#: dashboard/dashboard_modules/google_analytics.py:194
#: dashboard/dashboard_modules/google_analytics.py:202
#: dashboard/dashboard_modules/yandex_metrika.py:149
#: dashboard/dashboard_modules/yandex_metrika.py:157
msgid "By day"
msgstr "По дням"
#: dashboard/dashboard_modules/google_analytics.py:195
#: dashboard/dashboard_modules/google_analytics.py:203
#: dashboard/dashboard_modules/yandex_metrika.py:150
#: dashboard/dashboard_modules/yandex_metrika.py:158
msgid "By week"
msgstr "По неделям"
#: dashboard/dashboard_modules/google_analytics.py:196
#: dashboard/dashboard_modules/google_analytics.py:204
#: dashboard/dashboard_modules/yandex_metrika.py:151
#: dashboard/dashboard_modules/yandex_metrika.py:159
msgid "By month"
msgstr "По месяцам"
#: dashboard/dashboard_modules/google_analytics.py:277
#, python-format
msgid ""
"Please <a href=\"%s\">attach Google account and choose Google Analytics "
"counter</a> to start using widget"
msgstr ""
"Пожалуйста <a href=\"%s\">прикрепите аккаунт Google и выберите счетчик "
"Google Analytics</a> для виджета"
#: dashboard/dashboard_modules/google_analytics.py:280
#, python-format
msgid ""
"Please <a href=\"%s\">select Google Analytics counter</a> to start using "
"widget"
msgstr ""
"Пожалуйста <a href=\"%s\">выберите счетчик Google Analytics</a> для виджета"
#: dashboard/dashboard_modules/google_analytics.py:299
#: dashboard/dashboard_modules/google_analytics_views.py:42
#: dashboard/dashboard_modules/yandex_metrika.py:236
#: dashboard/dashboard_modules/yandex_metrika_views.py:37
msgid "API request failed."
msgstr "Ошибка запроса к API."
#: dashboard/dashboard_modules/google_analytics.py:301
#: dashboard/dashboard_modules/yandex_metrika.py:238
#, python-format
msgid " Try to <a href=\"%s\">revoke and grant access</a> again"
msgstr " Попробуйте <a href=\"%s\">убрать и предоставить доступ</a> заново"
#: dashboard/dashboard_modules/google_analytics.py:311
msgid "Google Analytics visitors totals"
msgstr "Данные о посещениях Google Analytics"
#: dashboard/dashboard_modules/google_analytics.py:189
#: dashboard/templates/jet.dashboard/modules/google_analytics_period_visitors.html:15
#: dashboard/dashboard_modules/google_analytics.py:326
msgid "users"
msgstr "пользователи"
#: dashboard/dashboard_modules/google_analytics.py:190
#: dashboard/templates/jet.dashboard/modules/google_analytics_period_visitors.html:16
#: dashboard/dashboard_modules/google_analytics.py:327
msgid "sessions"
msgstr "сессии"
#: dashboard/dashboard_modules/google_analytics.py:191
#: dashboard/dashboard_modules/yandex_metrika.py:146
#: dashboard/templates/jet.dashboard/modules/google_analytics_period_visitors.html:17
#: dashboard/templates/jet.dashboard/modules/yandex_metrika_period_visitors.html:17
#: dashboard/dashboard_modules/google_analytics.py:328
#: dashboard/dashboard_modules/yandex_metrika.py:267
msgid "views"
msgstr "просмотры"
#: dashboard/dashboard_modules/google_analytics.py:330
#: dashboard/dashboard_modules/google_analytics.py:388
#: dashboard/dashboard_modules/google_analytics.py:438
#: dashboard/dashboard_modules/yandex_metrika.py:269
#: dashboard/dashboard_modules/yandex_metrika.py:321
#: dashboard/dashboard_modules/yandex_metrika.py:365
msgid "Bad server response"
msgstr "Некорректный ответ сервера"
#: dashboard/dashboard_modules/google_analytics.py:340
msgid "Google Analytics visitors chart"
msgstr "График посещений Google Analytics"
#: dashboard/dashboard_modules/google_analytics.py:398
msgid "Google Analytics period visitors"
msgstr "Посещения Google Analytics за период"
#: dashboard/dashboard_modules/google_analytics_views.py:26
#: dashboard/dashboard_modules/google_analytics_views.py:46
#: dashboard/dashboard_modules/yandex_metrika_views.py:23
#: dashboard/dashboard_modules/yandex_metrika_views.py:45
msgid "Module not found"
msgstr "Модуль не найден"
#: dashboard/dashboard_modules/google_analytics_views.py:44
#: dashboard/dashboard_modules/yandex_metrika_views.py:43
msgid "Bad arguments"
msgstr "Некорректные аргументы"
#: dashboard/dashboard_modules/yandex_metrika.py:219
#, python-format
msgid ""
"Please <a href=\"%s\">attach Yandex account and choose Yandex Metrika "
"counter</a> to start using widget"
msgstr ""
"Пожалуйста <a href=\"%s\">прикрепите аккаунт Яндекс и выберите счетчик "
"Яндекс Метрики</a> для виджета"
#: dashboard/dashboard_modules/yandex_metrika.py:222
#, python-format
msgid ""
"Please <a href=\"%s\">select Yandex Metrika counter</a> to start using widget"
msgstr ""
"Пожалуйста <a href=\"%s\">выберите счетчик Яндекс Метрики</a> для виджета"
#: dashboard/dashboard_modules/yandex_metrika.py:250
msgid "Yandex Metrika visitors totals"
msgstr "Данные о посещениях Яндекс Метрики"
#: dashboard/dashboard_modules/yandex_metrika.py:144
#: dashboard/templates/jet.dashboard/modules/yandex_metrika_period_visitors.html:15
#: dashboard/dashboard_modules/yandex_metrika.py:265
msgid "visitors"
msgstr "посетители"
#: dashboard/dashboard_modules/yandex_metrika.py:145
#: dashboard/templates/jet.dashboard/modules/yandex_metrika_period_visitors.html:16
#: dashboard/dashboard_modules/yandex_metrika.py:266
msgid "visits"
msgstr "визиты"
#: dashboard/dashboard_modules/yandex_metrika.py:279
msgid "Yandex Metrika visitors chart"
msgstr "График посещений Яндекс Метрики"
#: dashboard/dashboard_modules/yandex_metrika.py:331
msgid "Yandex Metrika period visitors"
msgstr "Посещения Яндекс Метрики за период"
#: dashboard/templates/jet.dashboard/dashboard.html:17
msgid "Delete widget"
msgstr "Удалить виджет"
#: dashboard/templates/jet.dashboard/dashboard.html:18
msgid "Are you sure want to delete this widget?"
msgstr "Вы точно хотите удалить этот виджет?"
#: dashboard/templates/jet.dashboard/dashboard_tools.html:7
msgid "widgets"
msgstr "виджеты"
#: dashboard/templates/jet.dashboard/dashboard_tools.html:8
msgid "available"
msgstr "доступные"
#: dashboard/templates/jet.dashboard/dashboard_tools.html:13
msgid "initials"
msgstr "изначальные"
#: dashboard/templates/jet.dashboard/dashboard_tools.html:21
#: dashboard/templates/jet.dashboard/dashboard_tools.html:27
msgid "Reset widgets"
msgstr "Сбросить виджеты"
#: dashboard/templates/jet.dashboard/dashboard_tools.html:28
msgid "Are you sure want to reset widgets?"
msgstr "Вы точно хотите сбросить виджеты?"
#: dashboard/templates/jet.dashboard/modules/feed.html:13
#: dashboard/templates/jet.dashboard/modules/google_analytics_period_visitors.html:34
#: dashboard/templates/jet.dashboard/modules/google_analytics_visitors_chart.html:30
#: dashboard/templates/jet.dashboard/modules/google_analytics_visitors_totals.html:23
#: dashboard/templates/jet.dashboard/modules/link_list.html:26
#: dashboard/templates/jet.dashboard/modules/yandex_metrika_period_visitors.html:34
#: dashboard/templates/jet.dashboard/modules/yandex_metrika_visitors_chart.html:30
#: dashboard/templates/jet.dashboard/modules/yandex_metrika_visitors_totals.html:23
msgid "Nothing to show"
msgstr "Содержимое отсутствует"

View File

@@ -0,0 +1,28 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-09-11 12:44+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: static/jet/js/src/features/dashboard.js:79 static/jet/js/src/features/dashboard.js:208
msgid "Cancel"
msgstr "Отмена"
#: static/jet/js/src/features/dashboard.js:203
msgid "Delete"
msgstr "Удалить"
#: static/jet/js/src/features/dashboard.js:74
msgid "Yes"
msgstr "Да"

View File

@@ -0,0 +1,488 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-01-20 10:30+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"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: dashboard.py:210
msgid "Quick links"
msgstr "快捷链接"
#: dashboard.py:216
msgid "Return to site"
msgstr "返回站点"
#: dashboard.py:217
msgid "Change password"
msgstr "修改密码"
#: dashboard.py:219
msgid "Log out"
msgstr "退出"
#: dashboard.py:227 modules.py:299
msgid "Applications"
msgstr "应用"
#: dashboard.py:235
msgid "Administration"
msgstr "管理"
#: dashboard.py:243 modules.py:446
msgid "Recent Actions"
msgstr "最近操作"
#: dashboard.py:251
msgid "Latest Django News"
msgstr "Django动态"
#: dashboard.py:260
msgid "Support"
msgstr "支持"
#: dashboard.py:263
msgid "Django documentation"
msgstr "Django文档"
#: dashboard.py:268
msgid "Django \"django-users\" mailing list"
msgstr "Django \"django-users\" 邮件列表"
#: dashboard.py:273
msgid "Django irc channel"
msgstr "Django IRC频道"
#: dashboard.py:288
msgid "Application models"
msgstr "应用Models"
#: dashboard_modules/google_analytics.py:145
#: dashboard_modules/yandex_metrika.py:103
msgid "Revoke access"
msgstr "收回访问权"
#: dashboard_modules/google_analytics.py:150
#: dashboard_modules/yandex_metrika.py:108
msgid "Grant access"
msgstr "分配访问权"
#: dashboard_modules/google_analytics.py:163
#: dashboard_modules/yandex_metrika.py:118
msgid "Access"
msgstr "访问"
#: dashboard_modules/google_analytics.py:164
#: dashboard_modules/yandex_metrika.py:119
msgid "Counter"
msgstr "统计"
#: dashboard_modules/google_analytics.py:165
#: dashboard_modules/yandex_metrika.py:120
msgid "Statistics period"
msgstr "统计周期"
#: dashboard_modules/google_analytics.py:166
#: dashboard_modules/yandex_metrika.py:121
msgid "Today"
msgstr "今日"
#: dashboard_modules/google_analytics.py:167
#: dashboard_modules/yandex_metrika.py:122
msgid "Last week"
msgstr "上周"
#: dashboard_modules/google_analytics.py:168
#: dashboard_modules/yandex_metrika.py:123
msgid "Last month"
msgstr "上月"
#: dashboard_modules/google_analytics.py:169
#: dashboard_modules/yandex_metrika.py:124
msgid "Last quarter"
msgstr "最近15分钟"
#: dashboard_modules/google_analytics.py:170
#: dashboard_modules/yandex_metrika.py:125
msgid "Last year"
msgstr "去年"
#: dashboard_modules/google_analytics.py:180
#: dashboard_modules/yandex_metrika.py:135
msgid "none"
msgstr "无"
#: dashboard_modules/google_analytics.py:183
#: dashboard_modules/yandex_metrika.py:138
msgid "grant access first"
msgstr "优先分配访问权"
#: dashboard_modules/google_analytics.py:183
#: dashboard_modules/yandex_metrika.py:138
msgid "counters loading failed"
msgstr "统计信息加载失败"
#: dashboard_modules/google_analytics.py:188
#: dashboard_modules/yandex_metrika.py:143
msgid "Show"
msgstr "显示"
#: dashboard_modules/google_analytics.py:189
#: dashboard_modules/google_analytics.py:326
#: templates/jet.dashboard/modules/google_analytics_period_visitors.html:15
msgid "users"
msgstr "用户"
#: dashboard_modules/google_analytics.py:190
#: dashboard_modules/google_analytics.py:327
#: templates/jet.dashboard/modules/google_analytics_period_visitors.html:16
msgid "sessions"
msgstr "用户会话"
#: dashboard_modules/google_analytics.py:191
#: dashboard_modules/google_analytics.py:328
#: dashboard_modules/yandex_metrika.py:146
#: dashboard_modules/yandex_metrika.py:267
#: templates/jet.dashboard/modules/google_analytics_period_visitors.html:17
#: templates/jet.dashboard/modules/yandex_metrika_period_visitors.html:17
msgid "views"
msgstr "视图"
#: dashboard_modules/google_analytics.py:193
#: dashboard_modules/google_analytics.py:201
#: dashboard_modules/yandex_metrika.py:148
#: dashboard_modules/yandex_metrika.py:156
msgid "Group"
msgstr "组"
#: dashboard_modules/google_analytics.py:194
#: dashboard_modules/google_analytics.py:202
#: dashboard_modules/yandex_metrika.py:149
#: dashboard_modules/yandex_metrika.py:157
msgid "By day"
msgstr "按天"
#: dashboard_modules/google_analytics.py:195
#: dashboard_modules/google_analytics.py:203
#: dashboard_modules/yandex_metrika.py:150
#: dashboard_modules/yandex_metrika.py:158
msgid "By week"
msgstr "按周"
#: dashboard_modules/google_analytics.py:196
#: dashboard_modules/google_analytics.py:204
#: dashboard_modules/yandex_metrika.py:151
#: dashboard_modules/yandex_metrika.py:159
msgid "By month"
msgstr "按月"
#: dashboard_modules/google_analytics.py:277
#, python-format
msgid ""
"Please <a href=\"%s\">attach Google account and choose Google Analytics "
"counter</a> to start using widget"
msgstr ""
#: dashboard_modules/google_analytics.py:280
#, python-format
msgid ""
"Please <a href=\"%s\">select Google Analytics counter</a> to start using "
"widget"
msgstr ""
#: dashboard_modules/google_analytics.py:299
#: dashboard_modules/google_analytics_views.py:42
#: dashboard_modules/yandex_metrika.py:236
#: dashboard_modules/yandex_metrika_views.py:37
msgid "API request failed."
msgstr "API请求失败"
#: dashboard_modules/google_analytics.py:301
#: dashboard_modules/yandex_metrika.py:238
#, python-format
msgid " Try to <a href=\"%s\">revoke and grant access</a> again"
msgstr ""
#: dashboard_modules/google_analytics.py:311
msgid "Google Analytics visitors totals"
msgstr ""
#: dashboard_modules/google_analytics.py:330
#: dashboard_modules/google_analytics.py:388
#: dashboard_modules/google_analytics.py:438
#: dashboard_modules/yandex_metrika.py:269
#: dashboard_modules/yandex_metrika.py:321
#: dashboard_modules/yandex_metrika.py:365
msgid "Bad server response"
msgstr "服务器响应异常"
#: dashboard_modules/google_analytics.py:340
msgid "Google Analytics visitors chart"
msgstr ""
#: dashboard_modules/google_analytics.py:398
msgid "Google Analytics period visitors"
msgstr ""
#: dashboard_modules/google_analytics_views.py:26
#: dashboard_modules/google_analytics_views.py:46
#: dashboard_modules/yandex_metrika_views.py:23
#: dashboard_modules/yandex_metrika_views.py:45
msgid "Module not found"
msgstr "未找到模块"
#: dashboard_modules/google_analytics_views.py:44
#: dashboard_modules/yandex_metrika_views.py:43
msgid "Bad arguments"
msgstr "参数错误"
#: dashboard_modules/yandex_metrika.py:144
#: dashboard_modules/yandex_metrika.py:265
#: templates/jet.dashboard/modules/yandex_metrika_period_visitors.html:15
msgid "visitors"
msgstr "访问者"
#: dashboard_modules/yandex_metrika.py:145
#: dashboard_modules/yandex_metrika.py:266
#: templates/jet.dashboard/modules/yandex_metrika_period_visitors.html:16
msgid "visits"
msgstr ""
#: dashboard_modules/yandex_metrika.py:219
#, python-format
msgid ""
"Please <a href=\"%s\">attach Yandex account and choose Yandex Metrika "
"counter</a> to start using widget"
msgstr ""
#: dashboard_modules/yandex_metrika.py:222
#, python-format
msgid ""
"Please <a href=\"%s\">select Yandex Metrika counter</a> to start using widget"
msgstr ""
#: dashboard_modules/yandex_metrika.py:250
msgid "Yandex Metrika visitors totals"
msgstr ""
#: dashboard_modules/yandex_metrika.py:279
msgid "Yandex Metrika visitors chart"
msgstr ""
#: dashboard_modules/yandex_metrika.py:331
msgid "Yandex Metrika period visitors"
msgstr ""
#: models.py:11 modules.py:164
msgid "Title"
msgstr "标题"
#: models.py:12
msgid "module"
msgstr "模块"
#: models.py:13
msgid "application name"
msgstr "应用名称"
#: models.py:14
msgid "user"
msgstr "用户"
#: models.py:15
msgid "column"
msgstr "列"
#: models.py:16
msgid "order"
msgstr "排序"
#: models.py:17
msgid "settings"
msgstr "设置"
#: models.py:18
msgid "children"
msgstr "子项"
#: models.py:19
msgid "collapsed"
msgstr "展开"
#: models.py:22
msgid "user dashboard module"
msgstr "用户dashboard模块"
#: models.py:23
msgid "user dashboard modules"
msgstr "用户dashboard模块"
#: modules.py:163
msgid "URL"
msgstr "URL"
#: modules.py:165
msgid "External link"
msgstr "外部链接"
#: modules.py:169
msgid "Layout"
msgstr "布局"
#: modules.py:169
msgid "Stacked"
msgstr ""
#: modules.py:169
msgid "Inline"
msgstr ""
#: modules.py:215 modules.py:239
msgid "Links"
msgstr "链接"
#: modules.py:238
msgid "Link"
msgstr "链接"
#: modules.py:372
msgid "Models"
msgstr ""
#: modules.py:416 modules.py:523
msgid "Items limit"
msgstr ""
#: modules.py:524
msgid "Feed URL"
msgstr ""
#: modules.py:555
msgid "RSS Feed"
msgstr ""
#: modules.py:601
msgid "You must install the FeedParser python module"
msgstr ""
#: modules.py:606
msgid "You must provide a valid feed URL"
msgstr ""
#: templates/jet.dashboard/dashboard.html:17
msgid "Delete widget"
msgstr "删除widget"
#: templates/jet.dashboard/dashboard.html:18
msgid "Are you sure want to delete this widget?"
msgstr "你确定要删除这个widget吗"
#: templates/jet.dashboard/dashboard_tools.html:12
msgid "widgets"
msgstr ""
#: templates/jet.dashboard/dashboard_tools.html:13
msgid "available"
msgstr "可用的"
#: templates/jet.dashboard/dashboard_tools.html:18
msgid "initials"
msgstr ""
#: templates/jet.dashboard/dashboard_tools.html:23
#: templates/jet.dashboard/modules/app_list.html:18
#: templates/jet.dashboard/modules/model_list.html:8
msgid "Add"
msgstr "添加"
#: templates/jet.dashboard/dashboard_tools.html:26
#: templates/jet.dashboard/dashboard_tools.html:32
msgid "Reset widgets"
msgstr "重置widgets"
#: templates/jet.dashboard/dashboard_tools.html:33
msgid "Are you sure want to reset widgets?"
msgstr "你确定要重置widgets吗?"
#: templates/jet.dashboard/module.html:9
#: templates/jet.dashboard/modules/app_list.html:24
#: templates/jet.dashboard/modules/model_list.html:14 views.py:90
msgid "Change"
msgstr "修改"
#: templates/jet.dashboard/module.html:12
#: templates/jet.dashboard/update_module.html:55
#: templates/jet.dashboard/update_module.html:57
msgid "Delete"
msgstr "删除"
#: templates/jet.dashboard/modules/app_list.html:7
#: templates/jet.dashboard/modules/app_list.html:10
#, python-format
msgid "Models in the %(name)s application"
msgstr "在%(name)s应用下的Models"
#: templates/jet.dashboard/modules/feed.html:13
#: templates/jet.dashboard/modules/google_analytics_period_visitors.html:34
#: templates/jet.dashboard/modules/google_analytics_visitors_chart.html:30
#: templates/jet.dashboard/modules/google_analytics_visitors_totals.html:23
#: templates/jet.dashboard/modules/link_list.html:26
#: templates/jet.dashboard/modules/yandex_metrika_period_visitors.html:34
#: templates/jet.dashboard/modules/yandex_metrika_visitors_chart.html:30
#: templates/jet.dashboard/modules/yandex_metrika_visitors_totals.html:23
msgid "Nothing to show"
msgstr "没有内容"
#: templates/jet.dashboard/modules/google_analytics_period_visitors.html:14
#: templates/jet.dashboard/modules/yandex_metrika_period_visitors.html:14
msgid "Date"
msgstr "日期"
#: templates/jet.dashboard/modules/recent_actions.html:6
msgid "None available"
msgstr "没有可用内容"
#: templates/jet.dashboard/modules/recent_actions.html:30
msgid "Unknown content"
msgstr "未知内容"
#: templates/jet.dashboard/update_module.html:7
msgid "Home"
msgstr "首页"
#: templates/jet.dashboard/update_module.html:25
msgid "Please correct the errors below."
msgstr "请修正以下错误"
#: templates/jet.dashboard/update_module.html:69
#, python-format
msgid "Add another %(verbose_name)s"
msgstr "新增%(verbose_name)s"
#: templates/jet.dashboard/update_module.html:81
msgid "Save"
msgstr "保存"
#: views.py:19
msgid "Widget was successfully updated"
msgstr "Widget成功更新"
#: views.py:94 views.py:95
msgid "Items"
msgstr ""
#: views.py:161
msgid "Widget has been successfully added"
msgstr "Widget成功添加"

View File

@@ -0,0 +1,33 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
class Migration(migrations.Migration):
dependencies = [
]
operations = [
migrations.CreateModel(
name='UserDashboardModule',
fields=[
('id', models.AutoField(verbose_name='ID', primary_key=True, serialize=False, auto_created=True)),
('title', models.CharField(verbose_name='Title', max_length=255)),
('module', models.CharField(verbose_name='module', max_length=255)),
('app_label', models.CharField(verbose_name='application name', max_length=255, blank=True, null=True)),
('user', models.PositiveIntegerField(verbose_name='user')),
('column', models.PositiveIntegerField(verbose_name='column')),
('order', models.IntegerField(verbose_name='order')),
('settings', models.TextField(verbose_name='settings', blank=True, default='')),
('children', models.TextField(verbose_name='children', blank=True, default='')),
('collapsed', models.BooleanField(verbose_name='collapsed', default=False)),
],
options={
'verbose_name': 'user dashboard module',
'verbose_name_plural': 'user dashboard modules',
'ordering': ('column', 'order'),
},
),
]

View File

@@ -0,0 +1,59 @@
from importlib import import_module
import json
from django.db import models
from django.utils.encoding import python_2_unicode_compatible
from django.utils.translation import ugettext_lazy as _
from jet.utils import LazyDateTimeEncoder
@python_2_unicode_compatible
class UserDashboardModule(models.Model):
title = models.CharField(verbose_name=_('Title'), max_length=255)
module = models.CharField(verbose_name=_('module'), max_length=255)
app_label = models.CharField(verbose_name=_('application name'), max_length=255, null=True, blank=True)
user = models.PositiveIntegerField(verbose_name=_('user'))
column = models.PositiveIntegerField(verbose_name=_('column'))
order = models.IntegerField(verbose_name=_('order'))
settings = models.TextField(verbose_name=_('settings'), default='', blank=True)
children = models.TextField(verbose_name=_('children'), default='', blank=True)
collapsed = models.BooleanField(verbose_name=_('collapsed'), default=False)
class Meta:
verbose_name = _('user dashboard module')
verbose_name_plural = _('user dashboard modules')
ordering = ('column', 'order')
def __str__(self):
return self.module
def load_module(self):
try:
package, module_name = self.module.rsplit('.', 1)
package = import_module(package)
module = getattr(package, module_name)
return module
except AttributeError:
return None
except ImportError:
return None
def pop_settings(self, pop_settings):
settings = json.loads(self.settings)
for setting in pop_settings:
if setting in settings:
settings.pop(setting)
self.settings = json.dumps(settings, cls=LazyDateTimeEncoder)
self.save()
def update_settings(self, update_settings):
settings = json.loads(self.settings)
settings.update(update_settings)
self.settings = json.dumps(settings, cls=LazyDateTimeEncoder)
self.save()

View File

@@ -0,0 +1,609 @@
import json
from django import forms
from django.contrib.admin.models import LogEntry
from django.db.models import Q
from django.template.loader import render_to_string
from django.utils.translation import ugettext_lazy as _
from jet.utils import get_app_list, LazyDateTimeEncoder, context_to_dict
import datetime
class DashboardModule(object):
"""
Base dashboard module class. All dashboard modules (widgets) should inherit it.
"""
#: Path to widget's template. There is no need to extend such templates from any base templates.
template = 'jet.dashboard/module.html'
enabled = True
#: Specify if module can be draggable or has static position.
draggable = True
#: Specify if module can be collapsed.
collapsible = True
#: Specify if module can be deleted.
deletable = True
show_title = True
#: Default widget title that will be displayed for widget in the dashboard. User can change it later
#: for every widget.
title = ''
#: Specify title url. ``None`` if title shouldn't be clickable.
title_url = None
css_classes = None
#: HTML content that will be displayed before widget content.
pre_content = None
#: HTML content that will be displayed after widget content.
post_content = None
children = None
#: A ``django.forms.Form`` class which may contain custom widget settings. Not required.
settings_form = None
#: A ``django.forms.Form`` class which may contain custom widget child settings, if it has any. Not required.
child_form = None
#: Child name that will be displayed when editing module contents. Required if ``child_form`` set.
child_name = None
#: Same as child name, but plural.
child_name_plural = None
settings = None
column = None
order = None
#: A boolean field which specify if widget should be rendered on dashboard page load or fetched
#: later via AJAX.
ajax_load = False
#: A boolean field which makes widget ui color contrast.
contrast = False
#: Optional style attributes which will be applied to widget content container.
style = False
class Media:
css = ()
js = ()
def __init__(self, title=None, model=None, context=None, **kwargs):
if title is not None:
self.title = title
self.model = model
self.context = context or {}
for key in kwargs:
if hasattr(self.__class__, key):
setattr(self, key, kwargs[key])
self.children = self.children or []
if self.model:
self.load_from_model()
def fullname(self):
return self.__module__ + "." + self.__class__.__name__
def load_settings(self, settings):
"""
Should be implemented to restore saved in database settings. Required if you have custom settings.
"""
pass
def load_children(self, children):
self.children = children
def store_children(self):
"""
Specify if children field should be saved to database.
"""
return False
def settings_dict(self):
"""
Should be implemented to save settings to database. This method should return ``dict`` which will be serialized
using ``json``. Required if you have custom settings.
"""
pass
def dump_settings(self, settings=None):
settings = settings or self.settings_dict()
if settings:
return json.dumps(settings, cls=LazyDateTimeEncoder)
else:
return ''
def dump_children(self):
if self.store_children():
return json.dumps(self.children, cls=LazyDateTimeEncoder)
else:
return ''
def load_from_model(self):
self.title = self.model.title
if self.model.settings:
try:
self.settings = json.loads(self.model.settings)
self.load_settings(self.settings)
except ValueError:
pass
if self.store_children() and self.model.children:
try:
children = json.loads(self.model.children)
self.load_children(children)
except ValueError:
pass
def init_with_context(self, context):
"""
Allows you to load data and initialize module's state.
"""
pass
def get_context_data(self):
context = context_to_dict(self.context)
context.update({
'module': self
})
return context
def render(self):
self.init_with_context(self.context)
return render_to_string(self.template, self.get_context_data())
class LinkListItemForm(forms.Form):
url = forms.CharField(label=_('URL'))
title = forms.CharField(label=_('Title'))
external = forms.BooleanField(label=_('External link'), required=False)
class LinkListSettingsForm(forms.Form):
layout = forms.ChoiceField(label=_('Layout'), choices=(('stacked', _('Stacked')), ('inline', _('Inline'))))
class LinkList(DashboardModule):
"""
List of links widget.
Usage example:
.. code-block:: python
from django.utils.translation import ugettext_lazy as _
from jet.dashboard import modules
from jet.dashboard.dashboard import Dashboard, AppIndexDashboard
class CustomIndexDashboard(Dashboard):
columns = 3
def init_with_context(self, context):
self.available_children.append(modules.LinkList)
self.children.append(modules.LinkList(
_('Support'),
children=[
{
'title': _('Django documentation'),
'url': 'http://docs.djangoproject.com/',
'external': True,
},
{
'title': _('Django "django-users" mailing list'),
'url': 'http://groups.google.com/group/django-users',
'external': True,
},
{
'title': _('Django irc channel'),
'url': 'irc://irc.freenode.net/django',
'external': True,
},
],
column=0,
order=0
))
"""
title = _('Links')
template = 'jet.dashboard/modules/link_list.html'
#: Specify widget layout.
#: Allowed values ``stacked`` and ``inline``.
layout = 'stacked'
#: Links are contained in ``children`` attribute which you can pass as constructor parameter
#: to make your own preinstalled link lists.
#:
#: ``children`` is an array of dictinaries::
#:
#: [
#: {
#: 'title': _('Django documentation'),
#: 'url': 'http://docs.djangoproject.com/',
#: 'external': True,
#: },
#: ...
#: ]
children = []
settings_form = LinkListSettingsForm
child_form = LinkListItemForm
child_name = _('Link')
child_name_plural = _('Links')
def __init__(self, title=None, children=list(), **kwargs):
children = list(map(self.parse_link, children))
kwargs.update({'children': children})
super(LinkList, self).__init__(title, **kwargs)
def settings_dict(self):
return {
'draggable': self.draggable,
'deletable': self.deletable,
'collapsible': self.collapsible,
'layout': self.layout
}
def load_settings(self, settings):
self.draggable = settings.get('draggable', self.draggable)
self.deletable = settings.get('deletable', self.deletable)
self.collapsible = settings.get('collapsible', self.collapsible)
self.layout = settings.get('layout', self.layout)
def store_children(self):
return True
def parse_link(self, link):
if isinstance(link, (tuple, list)):
link_dict = {'title': link[0], 'url': link[1]}
if len(link) >= 3:
link_dict['external'] = link[2]
return link_dict
elif isinstance(link, (dict,)):
return link
class AppList(DashboardModule):
"""
Shows applications and containing models links. For each model "created" and "change" links are displayed.
Usage example:
.. code-block:: python
from django.utils.translation import ugettext_lazy as _
from jet.dashboard import modules
from jet.dashboard.dashboard import Dashboard, AppIndexDashboard
class CustomIndexDashboard(Dashboard):
columns = 3
def init_with_context(self, context):
self.children.append(modules.AppList(
_('Applications'),
exclude=('auth.*',),
column=0,
order=0
))
"""
title = _('Applications')
template = 'jet.dashboard/modules/app_list.html'
#: Specify models which should be displayed. ``models`` is an array of string formatted as ``app_label.model``.
#: Also its possible to specify all application models with * sign (e.g. ``auth.*``).
models = None
#: Specify models which should NOT be displayed. ``exclude`` is an array of string formatted as ``app_label.model``.
#: Also its possible to specify all application models with * sign (e.g. ``auth.*``).
exclude = None
hide_empty = True
def settings_dict(self):
return {
'models': self.models,
'exclude': self.exclude
}
def load_settings(self, settings):
self.models = settings.get('models')
self.exclude = settings.get('exclude')
def init_with_context(self, context):
app_list = get_app_list(context)
app_to_remove = []
for app in app_list:
app_name = app.get('app_label', app.get('name', ''))
app['models'] = filter(
lambda model: self.models is None or ('%s.%s' % (app_name, model['object_name'])) in self.models or ('%s.*' % app_name) in self.models,
app['models']
)
app['models'] = filter(
lambda model: self.exclude is None or (('%s.%s' % (app_name, model['object_name'])) not in self.exclude and ('%s.*' % app_name) not in self.exclude),
app['models']
)
app['models'] = list(app['models'])
if self.hide_empty and len(list(app['models'])) == 0:
app_to_remove.append(app)
for app in app_to_remove:
app_list.remove(app)
self.children = app_list
class ModelList(DashboardModule):
"""
Shows models links. For each model "created" and "change" links are displayed.
Usage example:
.. code-block:: python
from django.utils.translation import ugettext_lazy as _
from jet.dashboard import modules
from jet.dashboard.dashboard import Dashboard, AppIndexDashboard
class CustomIndexDashboard(Dashboard):
columns = 3
def init_with_context(self, context):
self.children.append(modules.ModelList(
_('Models'),
exclude=('auth.*',),
column=0,
order=0
))
"""
title = _('Models')
template = 'jet.dashboard/modules/model_list.html'
#: Specify models which should be displayed. ``models`` is an array of string formatted as ``app_label.model``.
#: Also its possible to specify all application models with * sign (e.g. ``auth.*``).
models = None
#: Specify models which should NOT be displayed. ``exclude`` is an array of string formatted as ``app_label.model``.
#: Also its possible to specify all application models with * sign (e.g. ``auth.*``).
exclude = None
hide_empty = True
def settings_dict(self):
return {
'models': self.models,
'exclude': self.exclude
}
def load_settings(self, settings):
self.models = settings.get('models')
self.exclude = settings.get('exclude')
def init_with_context(self, context):
app_list = get_app_list(context)
models = []
for app in app_list:
app_name = app.get('app_label', app.get('name', ''))
app['models'] = filter(
lambda model: self.models is None or ('%s.%s' % (app_name, model['object_name'])) in self.models or ('%s.*' % app_name) in self.models,
app['models']
)
app['models'] = filter(
lambda model: self.exclude is None or (('%s.%s' % (app_name, model['object_name'])) not in self.exclude and ('%s.*' % app_name) not in self.exclude),
app['models']
)
app['models'] = list(app['models'])
models.extend(app['models'])
self.children = models
class RecentActionsSettingsForm(forms.Form):
limit = forms.IntegerField(label=_('Items limit'), min_value=1)
class RecentActions(DashboardModule):
"""
Display list of most recent admin actions with following information:
entity name, type of action, author, date
Usage example:
.. code-block:: python
from django.utils.translation import ugettext_lazy as _
from jet.dashboard import modules
from jet.dashboard.dashboard import Dashboard, AppIndexDashboard
class CustomIndexDashboard(Dashboard):
columns = 3
def init_with_context(self, context):
self.children.append(modules.RecentActions(
_('Recent Actions'),
10,
column=0,
order=0
))
"""
title = _('Recent Actions')
template = 'jet.dashboard/modules/recent_actions.html'
#: Number if entries to be shown (may be changed by each user personally).
limit = 10
#: Specify actions of which models should be displayed. ``include_list`` is an array of string
#: formatted as ``app_label.model``. Also its possible to specify all application models
#: with * sign (e.g. ``auth.*``).
include_list = None
#: Specify actions of which models should NOT be displayed. ``exclude_list`` is an array of string
#: formatted as ``app_label.model``. Also its possible to specify all application models
#: with * sign (e.g. ``auth.*``).
exclude_list = None
settings_form = RecentActionsSettingsForm
user = None
def __init__(self, title=None, limit=10, **kwargs):
kwargs.update({'limit': limit})
super(RecentActions, self).__init__(title, **kwargs)
def settings_dict(self):
return {
'limit': self.limit,
'include_list': self.include_list,
'exclude_list': self.exclude_list,
'user': self.user
}
def load_settings(self, settings):
self.limit = settings.get('limit', self.limit)
self.include_list = settings.get('include_list')
self.exclude_list = settings.get('exclude_list')
self.user = settings.get('user', None)
def init_with_context(self, context):
def get_qset(list):
qset = None
for contenttype in list:
try:
app_label, model = contenttype.split('.')
if model == '*':
current_qset = Q(
content_type__app_label=app_label
)
else:
current_qset = Q(
content_type__app_label=app_label,
content_type__model=model
)
except:
raise ValueError('Invalid contenttype: "%s"' % contenttype)
if qset is None:
qset = current_qset
else:
qset = qset | current_qset
return qset
qs = LogEntry.objects
if self.user:
qs = qs.filter(
user__pk=int(self.user)
)
if self.include_list:
qs = qs.filter(get_qset(self.include_list))
if self.exclude_list:
qs = qs.exclude(get_qset(self.exclude_list))
self.children = qs.select_related('content_type', 'user')[:int(self.limit)]
class FeedSettingsForm(forms.Form):
limit = forms.IntegerField(label=_('Items limit'), min_value=1)
feed_url = forms.URLField(label=_('Feed URL'))
class Feed(DashboardModule):
"""
Display RSS Feed entries with following information:
entry title, date and link to the full version
Usage example:
.. code-block:: python
from django.utils.translation import ugettext_lazy as _
from jet.dashboard import modules
from jet.dashboard.dashboard import Dashboard, AppIndexDashboard
class CustomIndexDashboard(Dashboard):
columns = 3
def init_with_context(self, context):
self.children.append(modules.Feed(
_('Latest Django News'),
feed_url='http://www.djangoproject.com/rss/weblog/',
limit=5,
column=0,
order=0
))
"""
title = _('RSS Feed')
template = 'jet.dashboard/modules/feed.html'
#: URL of the RSS feed (may be changed by each user personally).
feed_url = None
#: Number if entries to be shown (may be changed by each user personally).
limit = None
settings_form = FeedSettingsForm
ajax_load = True
def __init__(self, title=None, feed_url=None, limit=None, **kwargs):
kwargs.update({'feed_url': feed_url, 'limit': limit})
super(Feed, self).__init__(title, **kwargs)
def settings_dict(self):
return {
'feed_url': self.feed_url,
'limit': self.limit
}
def load_settings(self, settings):
self.feed_url = settings.get('feed_url')
self.limit = settings.get('limit')
def init_with_context(self, context):
if self.feed_url is not None:
try:
import feedparser
feed = feedparser.parse(self.feed_url)
if self.limit is not None:
entries = feed['entries'][:self.limit]
else:
entries = feed['entries']
for entry in entries:
try:
entry.date = datetime.date(*entry.published_parsed[0:3])
except:
pass
self.children.append(entry)
except ImportError:
self.children.append({
'title': _('You must install the FeedParser python module'),
'warning': True,
})
else:
self.children.append({
'title': _('You must provide a valid feed URL'),
'warning': True,
})

View File

@@ -0,0 +1,5 @@
from django.conf import settings
# Dashboard
JET_INDEX_DASHBOARD = getattr(settings, 'JET_INDEX_DASHBOARD', 'jet.dashboard.dashboard.DefaultIndexDashboard')
JET_APP_INDEX_DASHBOARD = getattr(settings, 'JET_APP_INDEX_DASHBOARD', 'jet.dashboard.dashboard.DefaultAppIndexDashboard')

View File

@@ -0,0 +1,48 @@
# -*- coding: utf-8 -*-
from south.utils import datetime_utils as datetime
from south.db import db
from south.v2 import SchemaMigration
from django.db import models
class Migration(SchemaMigration):
def forwards(self, orm):
# Adding model 'UserDashboardModule'
db.create_table(u'dashboard_userdashboardmodule', (
(u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
('title', self.gf('django.db.models.fields.CharField')(max_length=255)),
('module', self.gf('django.db.models.fields.CharField')(max_length=255)),
('app_label', self.gf('django.db.models.fields.CharField')(max_length=255, null=True, blank=True)),
('user', self.gf('django.db.models.fields.PositiveIntegerField')()),
('column', self.gf('django.db.models.fields.PositiveIntegerField')()),
('order', self.gf('django.db.models.fields.IntegerField')()),
('settings', self.gf('django.db.models.fields.TextField')(default='', blank=True)),
('children', self.gf('django.db.models.fields.TextField')(default='', blank=True)),
('collapsed', self.gf('django.db.models.fields.BooleanField')(default=False)),
))
db.send_create_signal(u'dashboard', ['UserDashboardModule'])
def backwards(self, orm):
# Deleting model 'UserDashboardModule'
db.delete_table(u'dashboard_userdashboardmodule')
models = {
u'dashboard.userdashboardmodule': {
'Meta': {'ordering': "('column', 'order')", 'object_name': 'UserDashboardModule'},
'app_label': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
'children': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}),
'collapsed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'column': ('django.db.models.fields.PositiveIntegerField', [], {}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'module': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'order': ('django.db.models.fields.IntegerField', [], {}),
'settings': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}),
'title': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'user': ('django.db.models.fields.PositiveIntegerField', [], {})
}
}
complete_apps = ['dashboard']

View File

@@ -0,0 +1,54 @@
(function ($) {
$.fn.extend( {
googleAnalyticsChart: function() {
var $chart = $(this);
var ctx = $chart.get(0).getContext("2d");
var $data = $chart.find('.chart-data');
var $dataItems = $data.find('.chart-data-item');
var labels = [];
var data = [];
$dataItems.each(function() {
labels.push($(this).data('date'));
data.push($(this).data('value'));
});
var chart = new Chart(ctx).Line({
labels: labels,
datasets: [
{
fillColor: $chart.find('.chart-fillColor').css('color'),
strokeColor: $chart.find('.chart-strokeColor').css('color'),
pointColor: $chart.find('.chart-pointColor').css('color'),
pointHighlightFill: $chart.find('.chart-pointHighlightFill').css('color'),
responsive: true,
data: data
}
]
}, {
scaleGridLineColor: $chart.find('.chart-scaleGridLineColor').css('color'),
scaleLineColor: $chart.find('.chart-scaleLineColor').css('color'),
scaleFontColor: $chart.find('.chart-scaleFontColor').css('color')
});
var updateChartColors = function(chart) {
for (var i = 0; i < chart.datasets.length; ++i) {
chart.datasets[i]['fillColor'] = $chart.find('.chart-fillColor').css('color');
chart.datasets[i]['strokeColor'] = $chart.find('.chart-strokeColor').css('color');
chart.datasets[i]['pointColor'] = $chart.find('.chart-pointColor').css('color');
chart.datasets[i]['pointHighlightFill'] = $chart.find('.chart-pointHighlightFill').css('color');
}
chart.scale['gridLineColor'] = $chart.find('.chart-scaleGridLineColor').css('color');
chart.scale['lineColor'] = $chart.find('.chart-scaleLineColor').css('color');
chart.scale['textColor'] = $chart.find('.chart-scaleFontColor').css('color');
chart.update();
};
$(document).on('theme:changed', function() {
updateChartColors(chart);
});
}
});
})(jet.jQuery);

View File

@@ -0,0 +1,54 @@
(function ($) {
$.fn.extend( {
yandexMetrikaChart: function() {
var $chart = $(this);
var ctx = $chart.get(0).getContext("2d");
var $data = $chart.find('.chart-data');
var $dataItems = $data.find('.chart-data-item');
var labels = [];
var data = [];
$dataItems.each(function() {
labels.push($(this).data('date'));
data.push($(this).data('value'));
});
var chart = new Chart(ctx).Line({
labels: labels,
datasets: [
{
fillColor: $chart.find('.chart-fillColor').css('color'),
strokeColor: $chart.find('.chart-strokeColor').css('color'),
pointColor: $chart.find('.chart-pointColor').css('color'),
pointHighlightFill: $chart.find('.chart-pointHighlightFill').css('color'),
responsive: true,
data: data
}
]
}, {
scaleGridLineColor: $chart.find('.chart-scaleGridLineColor').css('color'),
scaleLineColor: $chart.find('.chart-scaleLineColor').css('color'),
scaleFontColor: $chart.find('.chart-scaleFontColor').css('color')
});
var updateChartColors = function(chart) {
for (var i = 0; i < chart.datasets.length; ++i) {
chart.datasets[i]['fillColor'] = $chart.find('.chart-fillColor').css('color');
chart.datasets[i]['strokeColor'] = $chart.find('.chart-strokeColor').css('color');
chart.datasets[i]['pointColor'] = $chart.find('.chart-pointColor').css('color');
chart.datasets[i]['pointHighlightFill'] = $chart.find('.chart-pointHighlightFill').css('color');
}
chart.scale['gridLineColor'] = $chart.find('.chart-scaleGridLineColor').css('color');
chart.scale['lineColor'] = $chart.find('.chart-scaleLineColor').css('color');
chart.scale['textColor'] = $chart.find('.chart-scaleFontColor').css('color');
chart.update();
};
$(document).on('theme:changed', function() {
updateChartColors(chart);
});
}
});
})(jet.jQuery);

View File

@@ -0,0 +1,55 @@
Contributing to Chart.js
========================
Contributions to Chart.js are welcome and encouraged, but please have a look through the guidelines in this document before raising an issue, or writing code for the project.
Using issues
------------
The [issue tracker](https://github.com/nnnick/Chart.js/issues) is the preferred channel for reporting bugs, requesting new features and submitting pull requests.
If you're suggesting a new chart type, please take a look at [writing new chart types](https://github.com/nnnick/Chart.js/blob/master/docs/06-Advanced.md#writing-new-chart-types) in the documentation, and some of the [community extensions](https://github.com/nnnick/Chart.js/blob/master/docs/06-Advanced.md#community-extensions) that have been created already.
To keep the library lightweight for everyone, it's unlikely we'll add many more chart types to the core of Chart.js, but issues are a good medium to design and spec out how new chart types could work and look.
Please do not use issues for support requests. For help using Chart.js, please take a look at the [`chartjs`](http://stackoverflow.com/questions/tagged/chartjs) tag on Stack Overflow.
Reporting bugs
--------------
Well structured, detailed bug reports are hugely valuable for the project.
Guidlines for reporting bugs:
- Check the issue search to see if it has already been reported
- Isolate the problem to a simple test case
- Provide a demonstration of the problem on [JS Bin](http://jsbin.com) or similar
Please provide any additional details associated with the bug, if it's browser or screen density specific, or only happens with a certain configuration or data.
Pull requests
-------------
Clear, concise pull requests are excellent at continuing the project's community driven growth. But please review [these guidelines](https://github.com/blog/1943-how-to-write-the-perfect-pull-request) and the guidelines below before starting work on the project.
Guidlines:
- Please create an issue first:
- For bugs, we can discuss the fixing approach
- For enhancements, we can discuss if it is within the project scope and avoid duplicate effort
- Please make changes to the files in [`/src`](https://github.com/nnnick/Chart.js/tree/master/src), not `Chart.js` or `Chart.min.js` in the repo root directory, this avoids merge conflicts
- Tabs for indentation, not spaces please
- If adding new functionality, please also update the relevant `.md` file in [`/docs`](https://github.com/nnnick/Chart.js/tree/master/docs)
- Please make your commits in logical sections with clear commit messages
Joining the Project
-------------
- Active committers and contributors are invited to introduce yourself and request commit access to this project. Please send an email to hello@nickdownie.com or file an issue.
License
-------
By contributing your code, you agree to license your contribution under the [MIT license](https://github.com/nnnick/Chart.js/blob/master/LICENSE.md).

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,7 @@
Copyright (c) 2013-2015 Nick Downie
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

View File

@@ -0,0 +1,20 @@
# Chart.js
[![Build Status](https://travis-ci.org/nnnick/Chart.js.svg?branch=master)](https://travis-ci.org/nnnick/Chart.js) [![Code Climate](https://codeclimate.com/github/nnnick/Chart.js/badges/gpa.svg)](https://codeclimate.com/github/nnnick/Chart.js)
*Simple HTML5 Charts using the canvas element* [chartjs.org](http://www.chartjs.org)
## Documentation
You can find documentation at [chartjs.org/docs](http://www.chartjs.org/docs/). The markdown files that build the site are available under `/docs`. Please note - in some of the json examples of configuration you might notice some liquid tags - this is just for the generating the site html, please disregard.
## Bugs, issues and contributing
Before submitting an issue or a pull request to the project, please take a moment to look over the [contributing guidelines](https://github.com/nnnick/Chart.js/blob/master/CONTRIBUTING.md) first.
For support using Chart.js, please post questions with the [`chartjs` tag on Stack Overflow](http://stackoverflow.com/questions/tagged/chartjs).
## License
Chart.js is available under the [MIT license](http://opensource.org/licenses/MIT).

View File

@@ -0,0 +1,37 @@
{% extends "admin/base_site.html" %}
{% load i18n static jet_dashboard_tags %}
{% block html %}{% get_dashboard 'app_index' as dashboard %}{{ block.super }}{% endblock %}
{% block extrastyle %}
{{ block.super }}
<link rel="stylesheet" type="text/css" href="{% static "admin/css/dashboard.css" %}" />
{% for css in dashboard.media.css %}
<link href="{% static css %}" rel="stylesheet" />
{% endfor %}
{% endblock %}
{% block extrahead %}
{{ block.super }}
{% for js in dashboard.media.js %}
<script src="{% static js %}"></script>
{% endfor %}
{% endblock %}
{% block bodyclass %}{{ block.super }} dashboard jet app-{{ app_label }}{% endblock %}
{% block sidebar %}{% endblock %}
{% block breadcrumbs %}
{% if not is_popup %}
<div class="breadcrumbs"></div>
{% endif %}
{{ dashboard.render_tools }}
{% endblock %}
{% block content %}
{{ dashboard.render }}
{% endblock %}

View File

@@ -0,0 +1,37 @@
{% extends "admin/base_site.html" %}
{% load i18n admin_static jet_dashboard_tags static %}
{% block html %}{% get_dashboard 'index' as dashboard %}{{ block.super }}{% endblock %}
{% block extrastyle %}
{{ block.super }}
<link rel="stylesheet" type="text/css" href="{% static "admin/css/dashboard.css" %}" />
{% for css in dashboard.media.css %}
<link href="{% static css %}" rel="stylesheet" />
{% endfor %}
{% endblock %}
{% block extrahead %}
{{ block.super }}
{% for js in dashboard.media.js %}
<script src="{% static js %}"></script>
{% endfor %}
{% endblock %}
{% block bodyclass %}{{ block.super }} dashboard jet{% endblock %}
{% block sidebar %}{% endblock %}
{% block breadcrumbs %}
{% if not is_popup %}
<div class="breadcrumbs"></div>
{% endif %}
{{ dashboard.render_tools }}
{% endblock %}
{% block content %}
{{ dashboard.render }}
{% endblock %}

View File

@@ -0,0 +1,37 @@
{% load i18n %}
<div class="dashboard-container columns_{{ columns|length }} cf">
{% for i in columns %}
<div class="dashboard-column-wrapper">
<div class="dashboard-column{% if forloop.first %} first{% endif %}">
{% for module in modules %}
{% if module.model.column == i %}
{% include "jet.dashboard/module.html" with module=module %}
{% endif %}
{% endfor %}
</div>
</div>
{% endfor %}
</div>
<div class="dialog-confirm" id="module-remove-dialog" title="{% trans "Delete widget" %}">
<p>{% trans "Are you sure want to delete this widget?" %}</p>
</div>
<form action="{% url "jet-dashboard:update_dashboard_modules" %}" method="POST" id="update-dashboard-modules-form">
{% csrf_token %}
<input type="hidden" name="app_label" value="{% if app_label %}{{ app_label }}{% endif %}">
<input type="hidden" name="modules">
</form>
<form action="{% url "jet-dashboard:update_dashboard_module_collapse" %}" method="POST" id="update-dashboard-module-collapse-form">
{% csrf_token %}
<input type="hidden" name="id">
<input type="hidden" name="collapsed">
</form>
<form action="{% url "jet-dashboard:remove_dashboard_module" %}" method="POST" id="remove-dashboard-module-form">
{% csrf_token %}
<input type="hidden" name="id">
</form>

View File

@@ -0,0 +1,36 @@
{% load i18n %}
<div class="dashboard-tools-toggle-container">
<a href="#" class="dashboard-tools-toggle button">
<span class="dashboard-tools-toggle-icon icon-settings"></span>
</a>
</div>
<div class="dashboard-tools">
<form action="{% url "jet-dashboard:add_user_dashboard_module" %}" method="POST" id="add-dashboard-module-form">
{% csrf_token %}
<select class="add-dashboard" name="module">
<option>{% trans "widgets" %}</option>
<optgroup label="{% trans "available" %}">
{% for module in available_children %}
<option value="{{ forloop.counter0 }}" data-type="available_children">{{ module.title }}</option>
{% endfor %}
</optgroup>
<optgroup label="{% trans "initials" %}">
{% for module in children %}
<option value="{{ forloop.counter0 }}" data-type="children">{{ module.title }}</option>
{% endfor %}
</optgroup>
</select><a href="#" class="button add-dashboard-link" title="{% trans "Add" %}"><span class="add-dashboard-link-icon icon-add"></span><span class="add-dashboard-link-label">{% trans "Add" %}</span></a>
<input type="hidden" name="app_label" value="{% if app_label %}{{ app_label }}{% endif %}">
<input type="hidden" name="type" value="">
<a href="#" class="button transparent reset-dashboard-link" title="{% trans "Reset widgets" %}"><span class="reset-dashboard-link-icon icon-reset"></span><span class="reset-dashboard-link-label">{% trans "Reset widgets" %}</span></a>
</form>
<form action="{% url "jet-dashboard:reset_dashboard" %}" method="POST" id="reset-dashboard-form">
{% csrf_token %}
<input type="hidden" name="app_label" value="{% if app_label %}{{ app_label }}{% endif %}">
</form>
<div class="dialog-confirm" id="reset-dashboard-dialog" title="{% trans "Reset widgets" %}">
<p>{% trans "Are you sure want to reset widgets?" %}</p>
</div>
</div>

View File

@@ -0,0 +1,41 @@
{% load i18n %}
<div class="dashboard-item{% if module.collapsible %} collapsible{% endif %}{% if module.model.collapsed %} collapsed{% endif %}{% if module.deletable %} deletable{% endif %}{% if module.ajax_load %} ajax{% endif %}{% if module.draggable %} draggable{% endif %}"{% if module.ajax_load %} data-ajax-url="{% url "jet-dashboard:load_dashboard_module" pk=module.model.id %}"{% endif %} data-module-id="{{ module.model.id }}">
<div class="dashboard-item-header">
{% if module.draggable %}
<span class="dashboard-item-header-drag icon-grid"></span>
{% endif %}
<span class="dashboard-item-header-buttons">
<a href="{% url "jet-dashboard:update_module" pk=module.model.id %}" title="{% trans "Change" %}"><span class="icon-edit"></span></a>
{% if module.deletable %}
<a href="#" title="{% trans "Delete" %}" class="dashboard-item-remove"><span class="icon-cross"></span></a>
{% endif %}
</span>
<span class="dashboard-item-header-title">
{% if module.collapsible %}
<a href="#" class="dashboard-item-collapse"><span class="dashboard-item-header-collapse-button icon-arrow-down"></span></a>
<a href="#" class="dashboard-item-collapse"><span class="dashboard-item-header-collapse-button icon-arrow-up"></span></a>
{% endif %}
{% if module.title_url %}
<a href="{{ module.title_url }}">{{ module.title }}</a>
{% else %}
{{ module.title }}
{% endif %}
</span>
<div class="cf"></div>
</div>
<div class="dashboard-item-content{% if module.contrast %} contrast{% endif %}"{% if module.style %} style="{{ module.style }}"{% endif %}>
{{ module.pre_content|default_if_none:"" }}
{% if module.ajax_load %}
<div class="loading-indicator-wrapper">
<span class="icon-refresh loading-indicator"></span>
</div>
{% else %}
{{ module.render }}
{% endif %}
{{ module.post_content|default_if_none:"" }}
</div>
</div>

View File

@@ -0,0 +1,38 @@
{% load i18n %}
<ul>
{% for app in module.children %}
<li class="contrast">
{% if app.name != app.app_label|capfirst|escape %}
<a href="{{ app.app_url }}" title="{% blocktrans with name=app.name %}Models in the {{ name }} application{% endblocktrans %}">{{ app.name }}</a>
{% else %}
{% trans app.app_label as app_label %}
<a href="{{ app.app_url }}" title="{% blocktrans with name=app_label %}Models in the {{ name }} application{% endblocktrans %}">{{ app_label }}</a>
{% endif %}
</li>
{% for model in app.models %}
<li>
<span class="float-right">
{% if model.add_url %}
<a href="{{ model.add_url }}" class="addlink" title="{% trans 'Add' %}"></a>
{% else %}
&nbsp;
{% endif %}
{% if model.admin_url %}
<a href="{{ model.admin_url }}" class="changelink" title="{% trans 'Change' %}"></a>
{% else %}
&nbsp;
{% endif %}
</span>
{% if model.admin_url %}
<a href="{{ model.admin_url }}">{{ model.name }}</a>
{% else %}
{{ model.name }}
{% endif %}
</li>
{% endfor %}
{% endfor %}
</ul>

View File

@@ -0,0 +1,16 @@
{% load i18n %}
<ul>
{% if module.children %}
{% for child in module.children %}
<li>
{% if child.date %}<span class="float-right dim">{{ child.date|date }}</span>{% endif %}
{% if child.warning %}<span class="warning">{{ child.title }}</span>{% else %}<a href="{{ child.link }}" target="_blank" class="nowrap"><span class="icon-open-external"></span> {{ child.title }}</a>{% endif %}
</li>
{% endfor %}
{% else %}
<li>
{% trans "Nothing to show" %}
</li>
{% endif %}
</ul>

View File

@@ -0,0 +1,38 @@
{% load i18n %}
{% if module.error %}
<ul>
<li>
{{ module.error }}
</li>
</ul>
{% elif module.children %}
<table class="table">
<thead>
<tr>
<th>{% trans "Date" %}</th>
<th>{% trans "users" as label %}{{ label|capfirst }}</th>
<th>{% trans "sessions" as label %}{{ label|capfirst }}</th>
<th>{% trans "views" as label %}{{ label|capfirst }}</th>
</tr>
</thead>
<tbody>
{% for data in module.children %}
<tr>
<th>{{ data.0 }}</th>
<td width="1" align="center">{{ data.1.ga_users }}</td>
<td width="1" align="center">{{ data.1.ga_sessions }}</td>
<td width="1" align="center">{{ data.1.ga_pageviews }}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% else %}
<ul>
<li>
{% trans "Nothing to show" %}
</li>
</ul>
{% endif %}

View File

@@ -0,0 +1,33 @@
{% load i18n %}
{% if module.error %}
<ul>
<li>
{{ module.error }}
</li>
</ul>
{% elif module.children %}
<div class="padding center">
<canvas id="chart_{{ module.model.pk }}" style="width: 100%;">
<div class="chart-fillColor"></div>
<div class="chart-strokeColor"></div>
<div class="chart-pointColor"></div>
<div class="chart-pointHighlightFill"></div>
<div class="chart-scaleGridLineColor"></div>
<div class="chart-scaleLineColor"></div>
<div class="chart-scaleFontColor"></div>
<div class="chart-data">
{% for data in module.children %}
<div class="chart-data-item" data-date="{{ data.0|date:"d/m" }}" data-value="{{ data.1 }}"></div>
{% endfor %}
</div>
</canvas>
<script>jet.jQuery('#chart_{{ module.model.pk }}').googleAnalyticsChart();</script>
</div>
{% else %}
<ul>
<li>
{% trans "Nothing to show" %}
</li>
</ul>
{% endif %}

View File

@@ -0,0 +1,26 @@
{% load i18n %}
{% if module.error %}
<ul>
<li>
{{ module.error }}
</li>
</ul>
{% elif module.children %}
<div class="padding center">
<ul class="inline bordered">
{% for statistic in module.children %}
<li>
<div class="big">{{ statistic.value }}</div>
<div class="dim">{{ statistic.title }}</div>
</li>
{% endfor %}
</ul>
</div>
{% else %}
<ul>
<li>
{% trans "Nothing to show" %}
</li>
</ul>
{% endif %}

View File

@@ -0,0 +1,29 @@
{% load i18n %}
{% if module.children %}
{% if module.layout == "stacked" %}
<ul>
{% for link in module.children %}
<li>
<a href="{{ link.url }}">{% if link.external %}<span class="icon-open-external"></span> {% endif %}{{ link.title }}</a>
</li>
{% endfor %}
</ul>
{% elif module.layout == "inline" %}
<div class="padding center">
<ul class="inline">
{% for link in module.children %}
<li>
<a href="{{ link.url }}" class="nowrap">{% if link.external %}<span class="icon-open-external"></span> {% endif %}{{ link.title }}</a>
</li>
{% endfor %}
</ul>
</div>
{% endif %}
{% else %}
<ul>
<li>
{% trans "Nothing to show" %}
</li>
</ul>
{% endif %}

View File

@@ -0,0 +1,27 @@
{% load i18n %}
<ul>
{% for model in module.children %}
<li>
<span class="float-right">
{% if model.add_url %}
<a href="{{ model.add_url }}" class="addlink" title="{% trans 'Add' %}"></a>
{% else %}
&nbsp;
{% endif %}
{% if model.admin_url %}
<a href="{{ model.admin_url }}" class="changelink" title="{% trans 'Change' %}"></a>
{% else %}
&nbsp;
{% endif %}
</span>
{% if model.admin_url %}
<a href="{{ model.admin_url }}">{{ model.name }}</a>
{% else %}
{{ model.name }}
{% endif %}
</li>
{% endfor %}
</ul>

Some files were not shown because too many files have changed in this diff Show More