Version Description
Download this release
Release Info
Developer | matomoteam |
Plugin | Matomo Analytics – Ethical Stats. Powerful Insights. |
Version | 4.10.0 |
Comparing to | |
See all releases |
Code changes from version 4.6.0 to 4.10.0
- app/LEGALNOTICE +1 -1
- app/README.md +1 -1
- app/bootstrap.php +1 -1
- app/config/global.ini.php +14 -2
- app/config/global.php +30 -21
- app/core/Access.php +1 -1
- app/core/Access/RolesProvider.php +1 -1
- app/core/Archive.php +108 -54
- app/core/Archive/ArchiveInvalidator.php +30 -14
- app/core/Archive/DataTableFactory.php +0 -1
- app/core/ArchiveProcessor.php +3 -2
- app/core/ArchiveProcessor/ArchivingStatus.php +0 -2
- app/core/ArchiveProcessor/Loader.php +4 -0
- app/core/ArchiveProcessor/LoaderLock.php +4 -0
- app/core/ArchiveProcessor/Parameters.php +0 -3
- app/core/ArchiveProcessor/Rules.php +40 -15
- app/core/AssetManager.php +77 -7
- app/core/AssetManager/UIAsset.php +0 -1
- app/core/AssetManager/UIAssetFetcher/Chunk.php +69 -0
- app/core/AssetManager/UIAssetFetcher/JScriptUIAssetFetcher.php +2 -18
- app/core/AssetManager/UIAssetFetcher/PluginUmdAssetFetcher.php +297 -0
- app/core/AssetManager/UIAssetFetcher/StylesheetUIAssetFetcher.php +0 -1
- app/core/Changes/Model.php +218 -0
- app/core/Changes/UserChanges.php +77 -0
- app/core/CliMulti/Output.php +0 -1
- app/core/CliMulti/OutputInterface.php +0 -3
- app/core/CliMulti/Process.php +6 -0
- app/core/CliMulti/StaticOutput.php +0 -2
- app/core/Columns/Dimension.php +1 -5
- app/core/Columns/Discriminator.php +0 -1
- app/core/Common.php +33 -2
- app/core/Config/Cache.php +13 -7
- app/core/Config/GeneralConfig.php +48 -0
- app/core/Config/IniFileChain.php +38 -29
- app/core/Console.php +9 -1
- app/core/Cookie.php +4 -1
- app/core/CronArchive.php +69 -7
- app/core/CronArchive/QueueConsumer.php +33 -4
- app/core/CronArchive/SegmentArchiving.php +0 -1
- app/core/DataAccess/ArchiveSelector.php +0 -1
- app/core/DataAccess/ArchivingDbAdapter.php +40 -6
- app/core/DataAccess/LogAggregator.php +2 -19
- app/core/DataAccess/Model.php +11 -4
- app/core/DataTable.php +0 -1
- app/core/DataTable/Map.php +0 -1
- app/core/DataTable/Renderer/Xml.php +1 -1
- app/core/DataTable/Row.php +5 -2
- app/core/Date.php +5 -1
- app/core/Db.php +2 -1
- app/core/Db/Adapter/Mysqli.php +4 -0
- app/core/Db/Adapter/Pdo/Mysql.php +4 -0
- app/core/Db/Schema/Mysql.php +18 -3
- app/core/Db/TransactionLevel.php +15 -3
- app/core/DeviceDetector/DeviceDetectorFactory.php +0 -1
- app/core/Exception/NotYetInstalledException.php +0 -2
- app/core/ExceptionHandler.php +26 -9
- app/core/Filechecks.php +6 -2
- app/core/Filesystem.php +33 -3
- app/core/FrontController.php +17 -5
- app/core/Http.php +1 -1
- app/core/Http/ControllerResolver.php +0 -1
- app/core/Mail/Transport.php +0 -1
- app/core/Menu/MenuAbstract.php +11 -4
- app/core/Metrics.php +0 -1
- app/core/NumberFormatter.php +1 -1
- app/core/Period/Range.php +11 -1
- app/core/Piwik.php +29 -1
- app/core/Plugin.php +22 -0
- app/core/Plugin/ArchivedMetric.php +1 -4
- app/core/Plugin/ComputedMetric.php +1 -4
- app/core/Plugin/Controller.php +9 -19
- app/core/Plugin/Dimension/VisitDimension.php +48 -0
- app/core/Plugin/Manager.php +0 -1
- app/core/Plugin/MetadataLoader.php +0 -1
- app/core/Plugin/Segment.php +15 -5
- app/core/Plugin/Visualization.php +47 -7
- app/core/ProfessionalServices/Advertising.php +1 -0
- app/core/ReportRenderer.php +17 -10
- app/core/ReportRenderer/Html.php +0 -1
- app/core/ReportRenderer/Pdf.php +8 -2
- app/core/Scheduler/RetryableException.php +9 -0
- app/core/Scheduler/Schedule/SpecificTime.php +6 -0
- app/core/Scheduler/Scheduler.php +42 -2
- app/core/Scheduler/Timetable.php +88 -0
- app/core/Segment.php +19 -6
- app/core/Segment/SegmentsList.php +14 -0
- app/core/Session.php +4 -2
- app/core/Session/SessionAuth.php +0 -2
- app/core/Session/SessionFingerprint.php +0 -1
- app/core/Settings/FieldConfig.php +12 -0
- app/core/Settings/FieldConfig/ArrayField.php +9 -0
- app/core/Settings/FieldConfig/MultiPair.php +10 -0
- app/core/SettingsPiwik.php +1 -1
- app/core/SupportedBrowser.php +0 -1
- app/core/Tracker.php +27 -4
- app/core/Tracker/Action.php +2 -0
- app/core/Tracker/Cache.php +0 -1
- app/core/Tracker/Db.php +3 -0
- app/core/Tracker/Db/Pdo/Mysql.php +0 -1
- app/core/Tracker/FingerprintSalt.php +0 -6
- app/core/Tracker/GoalManager.php +3 -2
- app/core/Tracker/PageUrl.php +2 -2
- app/core/Tracker/Request.php +4 -2
- app/core/Tracker/RequestSet.php +1 -2
- app/core/Tracker/Response.php +10 -4
- app/core/Twig.php +11 -22
- app/core/Updater.php +32 -36
- app/core/Updater/Migration/Custom.php +0 -2
- app/core/Updater/Migration/Db/DropColumns.php +0 -1
- app/core/Updates/4.0.0-b1.php +0 -1
- app/core/Updates/4.0.0-rc3.php +0 -1
- app/core/Updates/4.0.0-rc4.php +0 -1
- app/core/Updates/4.0.1-b1.php +0 -6
- app/core/Updates/4.1.2-b2.php +0 -6
- app/core/Updates/4.10.0-b1.php +61 -0
- app/core/Updates/4.3.0-b3.php +0 -3
- app/core/Updates/4.3.0-b4.php +0 -1
- app/core/Updates/4.3.0-rc2.php +0 -3
- app/core/Updates/4.5.0-b1.php +0 -1
- app/core/Updates/4.6.0-b1.php +0 -1
- app/core/Updates/4.7.0-b2.php +67 -0
- app/core/Updates/4.7.1-b1.php +57 -0
- app/core/Updates/5.0.0-b1.php +91 -0
- app/core/Url.php +43 -20
- app/core/UrlHelper.php +1 -1
- app/core/Validators/CharacterLength.php +0 -1
- app/core/Version.php +2 -1
- app/core/View.php +3 -1
- app/core/View/HtmlReportEmailHeaderView.php +0 -1
- app/core/View/OneClickDone.php +1 -1
- app/core/Visualization/Sparkline.php +15 -11
- app/core/testMinimumPhpVersion.php +26 -11
- app/js/piwik.min.js +37 -37
- app/lang/am.json +1 -0
- app/lang/ar.json +22 -10
- app/lang/be.json +4 -4
- app/lang/bg.json +2067 -261
- app/lang/bn.json +1 -0
- app/lang/bs.json +1 -1
- app/lang/ca.json +1076 -173
app/LEGALNOTICE
CHANGED
@@ -283,7 +283,7 @@ THIRD-PARTY CONTENT
|
|
283 |
Link: https://design.google.com/icons/
|
284 |
License: Apache License Version 2.0
|
285 |
|
286 |
-
Name: IcoMoon - Free icons ("icon-funnel", "icon-lab", "icon-archive", "icon-rocket", "icon-embed", "icon-page-performance") in plugins/Morpheus/fonts
|
287 |
Link: https://icomoon.io/#icons-icomoon
|
288 |
License: GPL
|
289 |
|
283 |
Link: https://design.google.com/icons/
|
284 |
License: Apache License Version 2.0
|
285 |
|
286 |
+
Name: IcoMoon - Free icons ("icon-funnel", "icon-lab", "icon-archive", "icon-rocket", "icon-embed", "icon-page-performance", "icon-github") in plugins/Morpheus/fonts
|
287 |
Link: https://icomoon.io/#icons-icomoon
|
288 |
License: GPL
|
289 |
|
app/README.md
CHANGED
@@ -6,7 +6,7 @@
|
|
6 |
|
7 |
## Code Status
|
8 |
|
9 |
-
[![Build Status](https://travis-ci.com/matomo-org/matomo.svg?branch=4.x-dev)](https://travis-ci.com/matomo-org/matomo/branches)
|
10 |
[![Percentage of issues still open](http://isitmaintained.com/badge/open/matomo-org/matomo.svg)](http://isitmaintained.com/project/matomo-org/matomo "Percentage of issues still open")
|
11 |
|
12 |
## Description
|
6 |
|
7 |
## Code Status
|
8 |
|
9 |
+
[![Build Status](https://travis-ci.com/matomo-org/matomo.svg?branch=4.x-dev)](https://app.travis-ci.com/matomo-org/matomo/branches)
|
10 |
[![Percentage of issues still open](http://isitmaintained.com/badge/open/matomo-org/matomo.svg)](http://isitmaintained.com/project/matomo-org/matomo "Percentage of issues still open")
|
11 |
|
12 |
## Description
|
app/bootstrap.php
CHANGED
@@ -156,7 +156,7 @@ if ( ! defined( 'ABSPATH' ) ) {
|
|
156 |
|
157 |
if ( !is_plugin_active('matomo/matomo.php')
|
158 |
&& (!defined( 'MATOMO_PHPUNIT_TEST' ) || !MATOMO_PHPUNIT_TEST) ) { // during tests the plugin may temporarily not be active
|
159 |
-
|
160 |
}
|
161 |
|
162 |
if ( $GLOBALS['MATOMO_LOADED_DIRECTLY'] ) {
|
156 |
|
157 |
if ( !is_plugin_active('matomo/matomo.php')
|
158 |
&& (!defined( 'MATOMO_PHPUNIT_TEST' ) || !MATOMO_PHPUNIT_TEST) ) { // during tests the plugin may temporarily not be active
|
159 |
+
exit;
|
160 |
}
|
161 |
|
162 |
if ( $GLOBALS['MATOMO_LOADED_DIRECTLY'] ) {
|
app/config/global.ini.php
CHANGED
@@ -385,6 +385,11 @@ archiving_custom_ranges[] =
|
|
385 |
; This feature will not work with the MYSQLI extension.
|
386 |
archiving_query_max_execution_time = 7200
|
387 |
|
|
|
|
|
|
|
|
|
|
|
388 |
; By default Matomo runs OPTIMIZE TABLE SQL queries to free spaces after deleting some data.
|
389 |
; If your Matomo tracks millions of pages, the OPTIMIZE TABLE queries might run for hours (seen in "SHOW FULL PROCESSLIST \g")
|
390 |
; so you can disable these special queries here:
|
@@ -634,6 +639,7 @@ assume_secure_protocol = 0
|
|
634 |
; By enabling this flag we will for example not allow the installation of a plugin via the UI as a plugin would be only
|
635 |
; installed on one server or a config one change would be only made on one server instead of all servers.
|
636 |
; This flag doesn't need to be enabled when the config file is on a shared filesystem such as NFS or EFS.
|
|
|
637 |
multi_server_environment = 0
|
638 |
|
639 |
; List of proxy headers for client IP addresses
|
@@ -676,7 +682,8 @@ proxy_ip_read_last_in_list = 0
|
|
676 |
enable_trusted_host_check = 1
|
677 |
|
678 |
; List of trusted hosts (eg domain or subdomain names) when generating absolute URLs.
|
679 |
-
;
|
|
|
680 |
; Examples:
|
681 |
;trusted_hosts[] = example.com
|
682 |
;trusted_hosts[] = stats.example.com
|
@@ -922,6 +929,11 @@ default_time_one_page_visit = 0
|
|
922 |
; By default, Matomo will remove the most common parameters which are known to change often (eg. session ID parameters)
|
923 |
url_query_parameter_to_exclude_from_url = "gclid,fbclid,fb_xd_fragment,fb_comment_id,phpsessid,jsessionid,sessionid,aspsessionid,doing_wp_cron,sid,pk_vid"
|
924 |
|
|
|
|
|
|
|
|
|
|
|
925 |
; if set to 1, Matomo attempts a "best guess" at the visitor's country of
|
926 |
; origin when the preferred language tag omits region information.
|
927 |
; The mapping is defined in core/DataFiles/LanguageToCountry.php,
|
@@ -1229,4 +1241,4 @@ PluginsInstalled[] = Intl
|
|
1229 |
SDK_batch_size = 10
|
1230 |
SDK_interval_value = 30
|
1231 |
|
1232 |
-
; NOTE: do not directly edit this file! See notice at the top
|
385 |
; This feature will not work with the MYSQLI extension.
|
386 |
archiving_query_max_execution_time = 7200
|
387 |
|
388 |
+
|
389 |
+
; Allows you to disable archiving segments for selected plugins. For more details please see https://matomo.org/faq/how-to-disable-archiving-the-segment-reports-for-specific-plugins
|
390 |
+
; Here you can specify the comma separated list eg: "plugin1,plugin2"
|
391 |
+
disable_archiving_segment_for_plugins = ""
|
392 |
+
|
393 |
; By default Matomo runs OPTIMIZE TABLE SQL queries to free spaces after deleting some data.
|
394 |
; If your Matomo tracks millions of pages, the OPTIMIZE TABLE queries might run for hours (seen in "SHOW FULL PROCESSLIST \g")
|
395 |
; so you can disable these special queries here:
|
639 |
; By enabling this flag we will for example not allow the installation of a plugin via the UI as a plugin would be only
|
640 |
; installed on one server or a config one change would be only made on one server instead of all servers.
|
641 |
; This flag doesn't need to be enabled when the config file is on a shared filesystem such as NFS or EFS.
|
642 |
+
; When enabled, Matomo will return the response code 200 instead of 503 in maintenance mode.
|
643 |
multi_server_environment = 0
|
644 |
|
645 |
; List of proxy headers for client IP addresses
|
682 |
enable_trusted_host_check = 1
|
683 |
|
684 |
; List of trusted hosts (eg domain or subdomain names) when generating absolute URLs.
|
685 |
+
; This only needs to be set for any hostnames that the Matomo UI will be accessed from. It is not necessary to set this
|
686 |
+
; for other additional hostnames (For example tracking, API, etc.)
|
687 |
; Examples:
|
688 |
;trusted_hosts[] = example.com
|
689 |
;trusted_hosts[] = stats.example.com
|
929 |
; By default, Matomo will remove the most common parameters which are known to change often (eg. session ID parameters)
|
930 |
url_query_parameter_to_exclude_from_url = "gclid,fbclid,fb_xd_fragment,fb_comment_id,phpsessid,jsessionid,sessionid,aspsessionid,doing_wp_cron,sid,pk_vid"
|
931 |
|
932 |
+
; If set to 1, Matomo will use the default provider if no other provider is configured.
|
933 |
+
; In addition the default provider will be used as a fallback when the configure provider does not return any results.
|
934 |
+
; If set to 0, the default provider will be unavailable. Instead the "disabled" provider will be used as default and fallback instead.
|
935 |
+
enable_default_location_provider = 1
|
936 |
+
|
937 |
; if set to 1, Matomo attempts a "best guess" at the visitor's country of
|
938 |
; origin when the preferred language tag omits region information.
|
939 |
; The mapping is defined in core/DataFiles/LanguageToCountry.php,
|
1241 |
SDK_batch_size = 10
|
1242 |
SDK_interval_value = 30
|
1243 |
|
1244 |
+
; NOTE: do not directly edit this file! See notice at the top
|
app/config/global.php
CHANGED
@@ -4,7 +4,7 @@ use Psr\Container\ContainerInterface;
|
|
4 |
use Matomo\Cache\Eager;
|
5 |
use Piwik\SettingsServer;
|
6 |
|
7 |
-
return
|
8 |
|
9 |
'path.root' => PIWIK_DOCUMENT_ROOT,
|
10 |
|
@@ -35,6 +35,8 @@ return array(
|
|
35 |
|
36 |
'view.clearcompiledtemplates.enable' => true,
|
37 |
|
|
|
|
|
38 |
'Matomo\Cache\Eager' => function (ContainerInterface $c) {
|
39 |
$backend = $c->get('Matomo\Cache\Backend');
|
40 |
$cacheId = $c->get('cache.eager.cache_id');
|
@@ -58,7 +60,7 @@ return array(
|
|
58 |
// If Piwik is not installed yet, it's possible the tmp/ folder is not writable
|
59 |
// we prevent failing with an unclear message eg. coming from doctrine-cache
|
60 |
// by forcing to use a cache backend which always works ie. array
|
61 |
-
if(!\Piwik\SettingsPiwik::isMatomoInstalled()) {
|
62 |
$backend = 'array';
|
63 |
} else {
|
64 |
try {
|
@@ -71,10 +73,10 @@ return array(
|
|
71 |
return \Piwik\Cache::buildBackend($backend);
|
72 |
},
|
73 |
'cache.eager.cache_id' => function () {
|
74 |
-
return 'eagercache-' . str_replace(
|
75 |
},
|
76 |
|
77 |
-
'entities.idNames' => DI\add(
|
78 |
|
79 |
'Psr\Log\LoggerInterface' => DI\create('Psr\Log\NullLogger'),
|
80 |
|
@@ -83,19 +85,20 @@ return array(
|
|
83 |
|
84 |
'DeviceDetector\Cache\Cache' => DI\autowire('Piwik\DeviceDetector\DeviceDetectorCache')->constructor(86400),
|
85 |
|
86 |
-
'observers.global' =>
|
87 |
|
88 |
/**
|
89 |
-
* By setting this option to false, the check that the DB schema version matches the version of the source code will
|
90 |
-
* Thus it allows you to execute for example a newer version of Matomo with an older Matomo
|
91 |
-
* disabling this setting is not recommended because often an older DB version is not
|
92 |
-
*
|
93 |
-
* you
|
94 |
-
*
|
|
|
95 |
*/
|
96 |
'EnableDbVersionCheck' => true,
|
97 |
|
98 |
-
'fileintegrity.ignore' => DI\add(
|
99 |
'*.htaccess',
|
100 |
'*web.config',
|
101 |
'bootstrap.php',
|
@@ -146,7 +149,7 @@ return array(
|
|
146 |
'*.gitattributes',
|
147 |
'*.bower.json',
|
148 |
'*.travis.yml',
|
149 |
-
)
|
150 |
|
151 |
'Piwik\EventDispatcher' => DI\autowire()->constructorParameter('observers', DI\get('observers.global')),
|
152 |
|
@@ -155,7 +158,7 @@ return array(
|
|
155 |
$config = $c->get('Piwik\Config');
|
156 |
$general = $config->General;
|
157 |
|
158 |
-
$ips =
|
159 |
if (!empty($general['login_allowlist_ip']) && is_array($general['login_allowlist_ip'])) {
|
160 |
$ips = $general['login_allowlist_ip'];
|
161 |
} elseif (!empty($general['login_whitelist_ip']) && is_array($general['login_whitelist_ip'])) {
|
@@ -163,7 +166,7 @@ return array(
|
|
163 |
$ips = $general['login_whitelist_ip'];
|
164 |
}
|
165 |
|
166 |
-
$ipsResolved =
|
167 |
|
168 |
foreach ($ips as $ip) {
|
169 |
$ip = trim($ip);
|
@@ -186,8 +189,10 @@ return array(
|
|
186 |
if (function_exists('dns_get_record')) {
|
187 |
$entry = @dns_get_record($ip, DNS_AAAA);
|
188 |
|
189 |
-
if (
|
190 |
-
|
|
|
|
|
191 |
$resolvedIps[] = $entry['0']['ipv6'];
|
192 |
}
|
193 |
}
|
@@ -216,15 +221,19 @@ return array(
|
|
216 |
->constructorParameter('lookbackNSecondsCustom', DI\get('ini.Tracker.window_look_back_for_visitor')),
|
217 |
|
218 |
'Piwik\Tracker\Settings' => DI\autowire()
|
219 |
-
->constructorParameter(
|
|
|
|
|
|
|
220 |
|
221 |
'archiving.performance.logger' => null,
|
222 |
|
223 |
-
\Piwik\CronArchive\Performance\Logger::class => DI\autowire()
|
|
|
224 |
|
225 |
\Piwik\Concurrency\LockBackend::class => \DI\get(\Piwik\Concurrency\LockBackend\MySqlLockBackend::class),
|
226 |
|
227 |
-
\Piwik\Segment\SegmentsList::class => function(){
|
228 |
return \Piwik\Segment\SegmentsList::get();
|
229 |
}
|
230 |
-
|
4 |
use Matomo\Cache\Eager;
|
5 |
use Piwik\SettingsServer;
|
6 |
|
7 |
+
return [
|
8 |
|
9 |
'path.root' => PIWIK_DOCUMENT_ROOT,
|
10 |
|
35 |
|
36 |
'view.clearcompiledtemplates.enable' => true,
|
37 |
|
38 |
+
'twig.cache' => DI\string('{path.tmp.templates}'),
|
39 |
+
|
40 |
'Matomo\Cache\Eager' => function (ContainerInterface $c) {
|
41 |
$backend = $c->get('Matomo\Cache\Backend');
|
42 |
$cacheId = $c->get('cache.eager.cache_id');
|
60 |
// If Piwik is not installed yet, it's possible the tmp/ folder is not writable
|
61 |
// we prevent failing with an unclear message eg. coming from doctrine-cache
|
62 |
// by forcing to use a cache backend which always works ie. array
|
63 |
+
if (!\Piwik\SettingsPiwik::isMatomoInstalled()) {
|
64 |
$backend = 'array';
|
65 |
} else {
|
66 |
try {
|
73 |
return \Piwik\Cache::buildBackend($backend);
|
74 |
},
|
75 |
'cache.eager.cache_id' => function () {
|
76 |
+
return 'eagercache-' . str_replace(['.', '-'], '', \Piwik\Version::VERSION) . '-';
|
77 |
},
|
78 |
|
79 |
+
'entities.idNames' => DI\add(['idGoal', 'idDimension']),
|
80 |
|
81 |
'Psr\Log\LoggerInterface' => DI\create('Psr\Log\NullLogger'),
|
82 |
|
85 |
|
86 |
'DeviceDetector\Cache\Cache' => DI\autowire('Piwik\DeviceDetector\DeviceDetectorCache')->constructor(86400),
|
87 |
|
88 |
+
'observers.global' => [],
|
89 |
|
90 |
/**
|
91 |
+
* By setting this option to false, the check that the DB schema version matches the version of the source code will
|
92 |
+
* be no longer performed. Thus it allows you to execute for example a newer version of Matomo with an older Matomo
|
93 |
+
* database version. Please note disabling this setting is not recommended because often an older DB version is not
|
94 |
+
* compatible with newer source code.
|
95 |
+
* If you disable this setting, make sure to execute the updates after updating the source code. The setting can be
|
96 |
+
* useful if you want to update Matomo without any outage when you know the current source code update will still
|
97 |
+
* run fine for a short time while in the background the database updates are running.
|
98 |
*/
|
99 |
'EnableDbVersionCheck' => true,
|
100 |
|
101 |
+
'fileintegrity.ignore' => DI\add([
|
102 |
'*.htaccess',
|
103 |
'*web.config',
|
104 |
'bootstrap.php',
|
149 |
'*.gitattributes',
|
150 |
'*.bower.json',
|
151 |
'*.travis.yml',
|
152 |
+
]),
|
153 |
|
154 |
'Piwik\EventDispatcher' => DI\autowire()->constructorParameter('observers', DI\get('observers.global')),
|
155 |
|
158 |
$config = $c->get('Piwik\Config');
|
159 |
$general = $config->General;
|
160 |
|
161 |
+
$ips = [];
|
162 |
if (!empty($general['login_allowlist_ip']) && is_array($general['login_allowlist_ip'])) {
|
163 |
$ips = $general['login_allowlist_ip'];
|
164 |
} elseif (!empty($general['login_whitelist_ip']) && is_array($general['login_whitelist_ip'])) {
|
166 |
$ips = $general['login_whitelist_ip'];
|
167 |
}
|
168 |
|
169 |
+
$ipsResolved = [];
|
170 |
|
171 |
foreach ($ips as $ip) {
|
172 |
$ip = trim($ip);
|
189 |
if (function_exists('dns_get_record')) {
|
190 |
$entry = @dns_get_record($ip, DNS_AAAA);
|
191 |
|
192 |
+
if (
|
193 |
+
!empty($entry['0']['ipv6'])
|
194 |
+
&& filter_var($entry['0']['ipv6'], FILTER_VALIDATE_IP)
|
195 |
+
) {
|
196 |
$resolvedIps[] = $entry['0']['ipv6'];
|
197 |
}
|
198 |
}
|
221 |
->constructorParameter('lookbackNSecondsCustom', DI\get('ini.Tracker.window_look_back_for_visitor')),
|
222 |
|
223 |
'Piwik\Tracker\Settings' => DI\autowire()
|
224 |
+
->constructorParameter(
|
225 |
+
'isSameFingerprintsAcrossWebsites',
|
226 |
+
DI\get('ini.Tracker.enable_fingerprinting_across_websites')
|
227 |
+
),
|
228 |
|
229 |
'archiving.performance.logger' => null,
|
230 |
|
231 |
+
\Piwik\CronArchive\Performance\Logger::class => DI\autowire()
|
232 |
+
->constructorParameter('logger', DI\get('archiving.performance.logger')),
|
233 |
|
234 |
\Piwik\Concurrency\LockBackend::class => \DI\get(\Piwik\Concurrency\LockBackend\MySqlLockBackend::class),
|
235 |
|
236 |
+
\Piwik\Segment\SegmentsList::class => function () {
|
237 |
return \Piwik\Segment\SegmentsList::get();
|
238 |
}
|
239 |
+
];
|
app/core/Access.php
CHANGED
@@ -616,7 +616,7 @@ class Access
|
|
616 |
|
617 |
foreach ($idSites as $idsite) {
|
618 |
if (!in_array($idsite, $idSitesAccessible)) {
|
619 |
-
$this->throwNoAccessException(Piwik::translate('
|
620 |
}
|
621 |
}
|
622 |
|
616 |
|
617 |
foreach ($idSites as $idsite) {
|
618 |
if (!in_array($idsite, $idSitesAccessible)) {
|
619 |
+
$this->throwNoAccessException(Piwik::translate('General_ExceptionCapabilityAccessWebsite', array("'" . $capability ."'", $idsite)));
|
620 |
}
|
621 |
}
|
622 |
|
app/core/Access/RolesProvider.php
CHANGED
@@ -59,7 +59,7 @@ class RolesProvider
|
|
59 |
{
|
60 |
if (!$this->isValidRole($roleId)) {
|
61 |
$roles = $this->getAllRoleIds();
|
62 |
-
throw new Exception(Piwik::translate("UsersManager_ExceptionAccessValues", implode(", ", $roles)));
|
63 |
}
|
64 |
}
|
65 |
|
59 |
{
|
60 |
if (!$this->isValidRole($roleId)) {
|
61 |
$roles = $this->getAllRoleIds();
|
62 |
+
throw new Exception(Piwik::translate("UsersManager_ExceptionAccessValues", [implode(", ", $roles), $roleId]));
|
63 |
}
|
64 |
}
|
65 |
|
app/core/Archive.php
CHANGED
@@ -1,4 +1,5 @@
|
|
1 |
<?php
|
|
|
2 |
/**
|
3 |
* Matomo - free/libre analytics platform
|
4 |
*
|
@@ -6,6 +7,7 @@
|
|
6 |
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
7 |
*
|
8 |
*/
|
|
|
9 |
namespace Piwik;
|
10 |
|
11 |
use Piwik\Archive\ArchiveQuery;
|
@@ -140,7 +142,7 @@ class Archive implements ArchiveQuery
|
|
140 |
*
|
141 |
* @var array
|
142 |
*/
|
143 |
-
private $idarchives =
|
144 |
|
145 |
/**
|
146 |
* If set to true, the result of all get functions (ie, getNumeric, getBlob, etc.)
|
@@ -181,9 +183,11 @@ class Archive implements ArchiveQuery
|
|
181 |
* @param bool $forceIndexedBySite Whether to force index the result of a query by site ID.
|
182 |
* @param bool $forceIndexedByDate Whether to force index the result of a query by period.
|
183 |
*/
|
184 |
-
public function __construct(
|
185 |
-
|
186 |
-
|
|
|
|
|
187 |
$this->params = $params;
|
188 |
$this->forceIndexedBySite = $forceIndexedBySite;
|
189 |
$this->forceIndexedByDate = $forceIndexedByDate;
|
@@ -210,8 +214,13 @@ class Archive implements ArchiveQuery
|
|
210 |
*/
|
211 |
public static function build($idSites, $period, $strDate, $segment = false, $_restrictSitesToLogin = false)
|
212 |
{
|
213 |
-
return StaticContainer::get(ArchiveQueryFactory::class)->build(
|
214 |
-
$
|
|
|
|
|
|
|
|
|
|
|
215 |
}
|
216 |
|
217 |
/**
|
@@ -236,11 +245,20 @@ class Archive implements ArchiveQuery
|
|
236 |
*
|
237 |
* @return ArchiveQuery
|
238 |
*/
|
239 |
-
public static function factory(
|
240 |
-
|
241 |
-
|
242 |
-
|
243 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
244 |
}
|
245 |
|
246 |
public static function shouldSkipArchiveIfSkippingSegmentArchiveForToday(Site $site, Period $period, Segment $segment)
|
@@ -277,7 +295,8 @@ class Archive implements ArchiveQuery
|
|
277 |
$result = $data->getIndexedArray($resultIndices);
|
278 |
|
279 |
// if only one metric is returned, just return it as a numeric value
|
280 |
-
if (
|
|
|
281 |
&& count($result) <= 1
|
282 |
&& (!is_array($names) || count($names) === 1)
|
283 |
) {
|
@@ -410,7 +429,7 @@ class Archive implements ArchiveQuery
|
|
410 |
*/
|
411 |
private function getRequestedPlugins($archiveNames)
|
412 |
{
|
413 |
-
$result =
|
414 |
|
415 |
foreach ($archiveNames as $name) {
|
416 |
$result[] = self::getPluginForReport($name);
|
@@ -441,7 +460,7 @@ class Archive implements ArchiveQuery
|
|
441 |
* @param string $segment @see {@link build()}
|
442 |
* @param bool $expanded If true, loads all subtables. See {@link getDataTableExpanded()}
|
443 |
* @param bool $flat If true, loads all subtables and disabled all recursive filters.
|
444 |
-
* @param int|null $idSubtable See {@link getDataTableExpanded()}
|
445 |
* @param int|null $depth See {@link getDataTableExpanded()}
|
446 |
* @return DataTable|DataTable\Map
|
447 |
*/
|
@@ -449,14 +468,19 @@ class Archive implements ArchiveQuery
|
|
449 |
{
|
450 |
Piwik::checkUserHasViewAccess($idSite);
|
451 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
452 |
if ($flat && !$idSubtable) {
|
453 |
$expanded = true;
|
454 |
}
|
455 |
|
456 |
$archive = Archive::build($idSite, $period, $date, $segment, $_restrictSitesToLogin = false);
|
457 |
-
if ($idSubtable === false) {
|
458 |
-
$idSubtable = null;
|
459 |
-
}
|
460 |
|
461 |
if ($expanded) {
|
462 |
$dataTable = $archive->getDataTableExpanded($recordName, $idSubtable, $depth);
|
@@ -489,19 +513,20 @@ class Archive implements ArchiveQuery
|
|
489 |
protected function get($archiveNames, $archiveDataType, $idSubtable = null)
|
490 |
{
|
491 |
if (!is_array($archiveNames)) {
|
492 |
-
$archiveNames =
|
493 |
}
|
494 |
|
495 |
$archiveNames = array_filter($archiveNames);
|
496 |
|
497 |
// apply idSubtable
|
498 |
-
if (
|
|
|
499 |
&& $idSubtable !== self::ID_SUBTABLE_LOAD_ALL_SUBTABLES
|
500 |
) {
|
501 |
// this is also done in ArchiveSelector. It should be actually only done in ArchiveSelector but DataCollection
|
502 |
// does require to have the subtableId appended. Needs to be changed in refactoring to have it only in one
|
503 |
// place.
|
504 |
-
$dataNames =
|
505 |
foreach ($archiveNames as $name) {
|
506 |
$dataNames[] = ArchiveSelector::appendIdsubtable($name, $idSubtable);
|
507 |
}
|
@@ -510,9 +535,15 @@ class Archive implements ArchiveQuery
|
|
510 |
}
|
511 |
|
512 |
$result = new Archive\DataCollection(
|
513 |
-
$dataNames,
|
|
|
|
|
|
|
|
|
|
|
|
|
514 |
if (empty($dataNames)) {
|
515 |
-
return $result; // NOTE:
|
516 |
}
|
517 |
|
518 |
$archiveIds = $this->getArchiveIds($archiveNames);
|
@@ -560,8 +591,8 @@ class Archive implements ArchiveQuery
|
|
560 |
|
561 |
// figure out which archives haven't been processed (if an archive has been processed,
|
562 |
// then we have the archive IDs in $this->idarchives)
|
563 |
-
$doneFlags =
|
564 |
-
$archiveGroups =
|
565 |
foreach (array_merge($plugins, ['all']) as $plugin) {
|
566 |
$doneFlag = $this->getDoneStringForPlugin($plugin, $this->params->getIdSites());
|
567 |
|
@@ -586,7 +617,8 @@ class Archive implements ArchiveQuery
|
|
586 |
|
587 |
// cache id archives for plugins we haven't processed yet
|
588 |
if (!empty($archiveGroups)) {
|
589 |
-
if (
|
|
|
590 |
&& !$this->forceFetchingWithoutLaunchingArchiving
|
591 |
) {
|
592 |
$this->cacheArchiveIdsAfterLaunching($archiveGroups, $plugins);
|
@@ -610,16 +642,14 @@ class Archive implements ArchiveQuery
|
|
610 |
*/
|
611 |
private function cacheArchiveIdsAfterLaunching($archiveGroups, $plugins)
|
612 |
{
|
613 |
-
$today = Date::today();
|
614 |
-
|
615 |
foreach ($this->params->getPeriods() as $period) {
|
616 |
-
$twoDaysBeforePeriod = $period->getDateStart()->subDay(2);
|
617 |
$twoDaysAfterPeriod = $period->getDateEnd()->addDay(2);
|
618 |
|
619 |
foreach ($this->params->getIdSites() as $idSite) {
|
620 |
$site = new Site($idSite);
|
621 |
|
622 |
-
if (
|
|
|
623 |
&& self::shouldSkipArchiveIfSkippingSegmentArchiveForToday($site, $period, $this->params->getSegment())
|
624 |
) {
|
625 |
Log::debug("Skipping archive %s for %s as segment today is disabled", $period->getLabel(), $period->getPrettyString());
|
@@ -630,15 +660,26 @@ class Archive implements ArchiveQuery
|
|
630 |
// we already know there are no stats for this period
|
631 |
// we add one day to make sure we don't miss the day of the website creation
|
632 |
if ($twoDaysAfterPeriod->isEarlier($site->getCreationDate())) {
|
633 |
-
Log::debug(
|
634 |
-
|
|
|
|
|
|
|
|
|
635 |
continue;
|
636 |
}
|
637 |
|
638 |
-
//
|
639 |
-
|
640 |
-
|
641 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
642 |
continue;
|
643 |
}
|
644 |
|
@@ -657,7 +698,11 @@ class Archive implements ArchiveQuery
|
|
657 |
private function cacheArchiveIdsWithoutLaunching($plugins)
|
658 |
{
|
659 |
$idarchivesByReport = ArchiveSelector::getArchiveIds(
|
660 |
-
$this->params->getIdSites(),
|
|
|
|
|
|
|
|
|
661 |
|
662 |
// initialize archive ID cache for each report
|
663 |
foreach ($plugins as $plugin) {
|
@@ -686,10 +731,10 @@ class Archive implements ArchiveQuery
|
|
686 |
private function getDoneStringForPlugin($plugin, $idSites)
|
687 |
{
|
688 |
return Rules::getDoneStringFlagFor(
|
689 |
-
|
690 |
-
|
691 |
-
|
692 |
-
|
693 |
);
|
694 |
}
|
695 |
|
@@ -707,15 +752,17 @@ class Archive implements ArchiveQuery
|
|
707 |
*/
|
708 |
private function getResultIndices()
|
709 |
{
|
710 |
-
$indices =
|
711 |
|
712 |
-
if (
|
|
|
713 |
|| $this->forceIndexedBySite
|
714 |
) {
|
715 |
$indices['site'] = 'idSite';
|
716 |
}
|
717 |
|
718 |
-
if (
|
|
|
719 |
|| $this->forceIndexedByDate
|
720 |
) {
|
721 |
$indices['period'] = 'date';
|
@@ -757,7 +804,7 @@ class Archive implements ArchiveQuery
|
|
757 |
private function initializeArchiveIdCache($doneFlag)
|
758 |
{
|
759 |
if (!isset($this->idarchives[$doneFlag])) {
|
760 |
-
$this->idarchives[$doneFlag] =
|
761 |
}
|
762 |
}
|
763 |
|
@@ -795,11 +842,11 @@ class Archive implements ArchiveQuery
|
|
795 |
*/
|
796 |
public static function getPluginForReport($report)
|
797 |
{
|
798 |
-
// Core metrics are always processed in Core, for the requested date/period/segment
|
799 |
if (in_array($report, Metrics::getVisitsMetricNames())) {
|
|
|
800 |
$report = 'VisitsSummary_CoreMetrics';
|
801 |
-
}
|
802 |
-
|
803 |
$report = 'Goals_Metrics';
|
804 |
} elseif (
|
805 |
strrpos($report, '_returning') === strlen($report) - strlen('_returning') ||
|
@@ -809,7 +856,8 @@ class Archive implements ArchiveQuery
|
|
809 |
}
|
810 |
|
811 |
$plugin = substr($report, 0, strpos($report, '_'));
|
812 |
-
if (
|
|
|
813 |
|| !\Piwik\Plugin\Manager::getInstance()->isPluginActivated($plugin)
|
814 |
) {
|
815 |
throw new \Exception("Error: The report '$report' was requested but it is not available at this stage."
|
@@ -835,7 +883,7 @@ class Archive implements ArchiveQuery
|
|
835 |
$periodString = $period->getRangeString();
|
836 |
$periodDateStr = $period->getLabel() == 'range' ? $periodString : $period->getDateStart()->toString();
|
837 |
|
838 |
-
$idSites =
|
839 |
|
840 |
// process for each plugin as well
|
841 |
foreach ($archiveGroups as $plugin) {
|
@@ -843,10 +891,16 @@ class Archive implements ArchiveQuery
|
|
843 |
$this->initializeArchiveIdCache($doneFlag);
|
844 |
|
845 |
$prepareResult = $coreAdminHomeApi->archiveReports(
|
846 |
-
$site->getId(),
|
847 |
-
$
|
848 |
-
|
849 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
850 |
&& !empty($prepareResult['idarchives'])
|
851 |
) {
|
852 |
foreach ($prepareResult['idarchives'] as $idArchive) {
|
@@ -859,7 +913,7 @@ class Archive implements ArchiveQuery
|
|
859 |
private function getIdArchivesByMonth($doneFlags)
|
860 |
{
|
861 |
// order idarchives by the table month they belong to
|
862 |
-
$idArchivesByMonth =
|
863 |
|
864 |
foreach (array_keys($doneFlags) as $doneFlag) {
|
865 |
if (empty($this->idarchives[$doneFlag])) {
|
1 |
<?php
|
2 |
+
|
3 |
/**
|
4 |
* Matomo - free/libre analytics platform
|
5 |
*
|
7 |
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
8 |
*
|
9 |
*/
|
10 |
+
|
11 |
namespace Piwik;
|
12 |
|
13 |
use Piwik\Archive\ArchiveQuery;
|
142 |
*
|
143 |
* @var array
|
144 |
*/
|
145 |
+
private $idarchives = [];
|
146 |
|
147 |
/**
|
148 |
* If set to true, the result of all get functions (ie, getNumeric, getBlob, etc.)
|
183 |
* @param bool $forceIndexedBySite Whether to force index the result of a query by site ID.
|
184 |
* @param bool $forceIndexedByDate Whether to force index the result of a query by period.
|
185 |
*/
|
186 |
+
public function __construct(
|
187 |
+
Parameters $params,
|
188 |
+
$forceIndexedBySite = false,
|
189 |
+
$forceIndexedByDate = false
|
190 |
+
) {
|
191 |
$this->params = $params;
|
192 |
$this->forceIndexedBySite = $forceIndexedBySite;
|
193 |
$this->forceIndexedByDate = $forceIndexedByDate;
|
214 |
*/
|
215 |
public static function build($idSites, $period, $strDate, $segment = false, $_restrictSitesToLogin = false)
|
216 |
{
|
217 |
+
return StaticContainer::get(ArchiveQueryFactory::class)->build(
|
218 |
+
$idSites,
|
219 |
+
$period,
|
220 |
+
$strDate,
|
221 |
+
$segment,
|
222 |
+
$_restrictSitesToLogin
|
223 |
+
);
|
224 |
}
|
225 |
|
226 |
/**
|
245 |
*
|
246 |
* @return ArchiveQuery
|
247 |
*/
|
248 |
+
public static function factory(
|
249 |
+
Segment $segment,
|
250 |
+
array $periods,
|
251 |
+
array $idSites,
|
252 |
+
$idSiteIsAll = false,
|
253 |
+
$isMultipleDate = false
|
254 |
+
) {
|
255 |
+
return StaticContainer::get(ArchiveQueryFactory::class)->factory(
|
256 |
+
$segment,
|
257 |
+
$periods,
|
258 |
+
$idSites,
|
259 |
+
$idSiteIsAll,
|
260 |
+
$isMultipleDate
|
261 |
+
);
|
262 |
}
|
263 |
|
264 |
public static function shouldSkipArchiveIfSkippingSegmentArchiveForToday(Site $site, Period $period, Segment $segment)
|
295 |
$result = $data->getIndexedArray($resultIndices);
|
296 |
|
297 |
// if only one metric is returned, just return it as a numeric value
|
298 |
+
if (
|
299 |
+
empty($resultIndices)
|
300 |
&& count($result) <= 1
|
301 |
&& (!is_array($names) || count($names) === 1)
|
302 |
) {
|
429 |
*/
|
430 |
private function getRequestedPlugins($archiveNames)
|
431 |
{
|
432 |
+
$result = [];
|
433 |
|
434 |
foreach ($archiveNames as $name) {
|
435 |
$result[] = self::getPluginForReport($name);
|
460 |
* @param string $segment @see {@link build()}
|
461 |
* @param bool $expanded If true, loads all subtables. See {@link getDataTableExpanded()}
|
462 |
* @param bool $flat If true, loads all subtables and disabled all recursive filters.
|
463 |
+
* @param int|null|string $idSubtable See {@link getDataTableExpanded()}
|
464 |
* @param int|null $depth See {@link getDataTableExpanded()}
|
465 |
* @return DataTable|DataTable\Map
|
466 |
*/
|
468 |
{
|
469 |
Piwik::checkUserHasViewAccess($idSite);
|
470 |
|
471 |
+
if ($idSubtable === false || $idSubtable === '') {
|
472 |
+
$idSubtable = null;
|
473 |
+
}
|
474 |
+
|
475 |
+
if (!empty($idSubtable) && (strtolower($idSubtable) !== self::ID_SUBTABLE_LOAD_ALL_SUBTABLES && !is_numeric($idSubtable))) {
|
476 |
+
throw new \Exception("idSubtable needs to be a number or '" . self::ID_SUBTABLE_LOAD_ALL_SUBTABLES . "', '$idSubtable' given.");
|
477 |
+
}
|
478 |
+
|
479 |
if ($flat && !$idSubtable) {
|
480 |
$expanded = true;
|
481 |
}
|
482 |
|
483 |
$archive = Archive::build($idSite, $period, $date, $segment, $_restrictSitesToLogin = false);
|
|
|
|
|
|
|
484 |
|
485 |
if ($expanded) {
|
486 |
$dataTable = $archive->getDataTableExpanded($recordName, $idSubtable, $depth);
|
513 |
protected function get($archiveNames, $archiveDataType, $idSubtable = null)
|
514 |
{
|
515 |
if (!is_array($archiveNames)) {
|
516 |
+
$archiveNames = [$archiveNames];
|
517 |
}
|
518 |
|
519 |
$archiveNames = array_filter($archiveNames);
|
520 |
|
521 |
// apply idSubtable
|
522 |
+
if (
|
523 |
+
$idSubtable !== null
|
524 |
&& $idSubtable !== self::ID_SUBTABLE_LOAD_ALL_SUBTABLES
|
525 |
) {
|
526 |
// this is also done in ArchiveSelector. It should be actually only done in ArchiveSelector but DataCollection
|
527 |
// does require to have the subtableId appended. Needs to be changed in refactoring to have it only in one
|
528 |
// place.
|
529 |
+
$dataNames = [];
|
530 |
foreach ($archiveNames as $name) {
|
531 |
$dataNames[] = ArchiveSelector::appendIdsubtable($name, $idSubtable);
|
532 |
}
|
535 |
}
|
536 |
|
537 |
$result = new Archive\DataCollection(
|
538 |
+
$dataNames,
|
539 |
+
$archiveDataType,
|
540 |
+
$this->params->getIdSites(),
|
541 |
+
$this->params->getPeriods(),
|
542 |
+
$this->params->getSegment(),
|
543 |
+
$defaultRow = null
|
544 |
+
);
|
545 |
if (empty($dataNames)) {
|
546 |
+
return $result; // NOTE: not posting Archive.noArchivedData here, because there might be archive data, someone just requested nothing
|
547 |
}
|
548 |
|
549 |
$archiveIds = $this->getArchiveIds($archiveNames);
|
591 |
|
592 |
// figure out which archives haven't been processed (if an archive has been processed,
|
593 |
// then we have the archive IDs in $this->idarchives)
|
594 |
+
$doneFlags = [];
|
595 |
+
$archiveGroups = [];
|
596 |
foreach (array_merge($plugins, ['all']) as $plugin) {
|
597 |
$doneFlag = $this->getDoneStringForPlugin($plugin, $this->params->getIdSites());
|
598 |
|
617 |
|
618 |
// cache id archives for plugins we haven't processed yet
|
619 |
if (!empty($archiveGroups)) {
|
620 |
+
if (
|
621 |
+
Rules::isArchivingEnabledFor($this->params->getIdSites(), $this->params->getSegment(), $this->getPeriodLabel())
|
622 |
&& !$this->forceFetchingWithoutLaunchingArchiving
|
623 |
) {
|
624 |
$this->cacheArchiveIdsAfterLaunching($archiveGroups, $plugins);
|
642 |
*/
|
643 |
private function cacheArchiveIdsAfterLaunching($archiveGroups, $plugins)
|
644 |
{
|
|
|
|
|
645 |
foreach ($this->params->getPeriods() as $period) {
|
|
|
646 |
$twoDaysAfterPeriod = $period->getDateEnd()->addDay(2);
|
647 |
|
648 |
foreach ($this->params->getIdSites() as $idSite) {
|
649 |
$site = new Site($idSite);
|
650 |
|
651 |
+
if (
|
652 |
+
Common::getRequestVar('skipArchiveSegmentToday', 0, 'int')
|
653 |
&& self::shouldSkipArchiveIfSkippingSegmentArchiveForToday($site, $period, $this->params->getSegment())
|
654 |
) {
|
655 |
Log::debug("Skipping archive %s for %s as segment today is disabled", $period->getLabel(), $period->getPrettyString());
|
660 |
// we already know there are no stats for this period
|
661 |
// we add one day to make sure we don't miss the day of the website creation
|
662 |
if ($twoDaysAfterPeriod->isEarlier($site->getCreationDate())) {
|
663 |
+
Log::debug(
|
664 |
+
"Archive site %s, %s (%s) skipped, archive is before the website was created.",
|
665 |
+
$idSite,
|
666 |
+
$period->getLabel(),
|
667 |
+
$period->getPrettyString()
|
668 |
+
);
|
669 |
continue;
|
670 |
}
|
671 |
|
672 |
+
// Allow for site timezone, local time may have started a new day ahead of UTC
|
673 |
+
$today = \Piwik\Date::factory('now', $site->getTimezone());
|
674 |
+
|
675 |
+
// if the starting date is in the future we know there are no visits
|
676 |
+
if ($period->getDateStart()->isLater($today)) {
|
677 |
+
Log::debug(
|
678 |
+
"Archive site %s, %s (%s) skipped, archive is after today.",
|
679 |
+
$idSite,
|
680 |
+
$period->getLabel(),
|
681 |
+
$period->getPrettyString()
|
682 |
+
);
|
683 |
continue;
|
684 |
}
|
685 |
|
698 |
private function cacheArchiveIdsWithoutLaunching($plugins)
|
699 |
{
|
700 |
$idarchivesByReport = ArchiveSelector::getArchiveIds(
|
701 |
+
$this->params->getIdSites(),
|
702 |
+
$this->params->getPeriods(),
|
703 |
+
$this->params->getSegment(),
|
704 |
+
$plugins
|
705 |
+
);
|
706 |
|
707 |
// initialize archive ID cache for each report
|
708 |
foreach ($plugins as $plugin) {
|
731 |
private function getDoneStringForPlugin($plugin, $idSites)
|
732 |
{
|
733 |
return Rules::getDoneStringFlagFor(
|
734 |
+
$idSites,
|
735 |
+
$this->params->getSegment(),
|
736 |
+
$this->getPeriodLabel(),
|
737 |
+
$plugin
|
738 |
);
|
739 |
}
|
740 |
|
752 |
*/
|
753 |
private function getResultIndices()
|
754 |
{
|
755 |
+
$indices = [];
|
756 |
|
757 |
+
if (
|
758 |
+
count($this->params->getIdSites()) > 1
|
759 |
|| $this->forceIndexedBySite
|
760 |
) {
|
761 |
$indices['site'] = 'idSite';
|
762 |
}
|
763 |
|
764 |
+
if (
|
765 |
+
count($this->params->getPeriods()) > 1
|
766 |
|| $this->forceIndexedByDate
|
767 |
) {
|
768 |
$indices['period'] = 'date';
|
804 |
private function initializeArchiveIdCache($doneFlag)
|
805 |
{
|
806 |
if (!isset($this->idarchives[$doneFlag])) {
|
807 |
+
$this->idarchives[$doneFlag] = [];
|
808 |
}
|
809 |
}
|
810 |
|
842 |
*/
|
843 |
public static function getPluginForReport($report)
|
844 |
{
|
|
|
845 |
if (in_array($report, Metrics::getVisitsMetricNames())) {
|
846 |
+
// Core metrics are always processed in Core, for the requested date/period/segment
|
847 |
$report = 'VisitsSummary_CoreMetrics';
|
848 |
+
} elseif (strpos($report, 'Goal_') === 0) {
|
849 |
+
// Goal_* metrics are processed by the Goals plugin (HACK)
|
850 |
$report = 'Goals_Metrics';
|
851 |
} elseif (
|
852 |
strrpos($report, '_returning') === strlen($report) - strlen('_returning') ||
|
856 |
}
|
857 |
|
858 |
$plugin = substr($report, 0, strpos($report, '_'));
|
859 |
+
if (
|
860 |
+
empty($plugin)
|
861 |
|| !\Piwik\Plugin\Manager::getInstance()->isPluginActivated($plugin)
|
862 |
) {
|
863 |
throw new \Exception("Error: The report '$report' was requested but it is not available at this stage."
|
883 |
$periodString = $period->getRangeString();
|
884 |
$periodDateStr = $period->getLabel() == 'range' ? $periodString : $period->getDateStart()->toString();
|
885 |
|
886 |
+
$idSites = [$site->getId()];
|
887 |
|
888 |
// process for each plugin as well
|
889 |
foreach ($archiveGroups as $plugin) {
|
891 |
$this->initializeArchiveIdCache($doneFlag);
|
892 |
|
893 |
$prepareResult = $coreAdminHomeApi->archiveReports(
|
894 |
+
$site->getId(),
|
895 |
+
$period->getLabel(),
|
896 |
+
$periodDateStr,
|
897 |
+
$this->params->getSegment()->getOriginalString(),
|
898 |
+
$plugin,
|
899 |
+
$requestedReport
|
900 |
+
);
|
901 |
+
|
902 |
+
if (
|
903 |
+
!empty($prepareResult)
|
904 |
&& !empty($prepareResult['idarchives'])
|
905 |
) {
|
906 |
foreach ($prepareResult['idarchives'] as $idArchive) {
|
913 |
private function getIdArchivesByMonth($doneFlags)
|
914 |
{
|
915 |
// order idarchives by the table month they belong to
|
916 |
+
$idArchivesByMonth = [];
|
917 |
|
918 |
foreach (array_keys($doneFlags) as $doneFlag) {
|
919 |
if (empty($this->idarchives[$doneFlag])) {
|
app/core/Archive/ArchiveInvalidator.php
CHANGED
@@ -30,7 +30,6 @@ use Piwik\Segment;
|
|
30 |
use Piwik\SettingsServer;
|
31 |
use Piwik\Site;
|
32 |
use Piwik\Tracker\Cache;
|
33 |
-
use Piwik\Tracker\Model as TrackerModel;
|
34 |
use Psr\Log\LoggerInterface;
|
35 |
|
36 |
/**
|
@@ -97,7 +96,7 @@ class ArchiveInvalidator
|
|
97 |
// we do not really have to get the value first. we could simply always try to call set() and it would update or
|
98 |
// insert the record if needed but we do not want to lock the table (especially since there are still some
|
99 |
// MyISAM installations)
|
100 |
-
$values = Option::getLike('%' . $this->rememberArchivedReportIdStart . '%');
|
101 |
|
102 |
$all = [];
|
103 |
foreach ($values as $name => $value) {
|
@@ -122,7 +121,7 @@ class ArchiveInvalidator
|
|
122 |
// we do not really have to get the value first. we could simply always try to call set() and it would update or
|
123 |
// insert the record if needed but we do not want to lock the table (especially since there are still some
|
124 |
// MyISAM installations)
|
125 |
-
$value = Option::getLike('%' . $key . '%');
|
126 |
}
|
127 |
|
128 |
// getLike() returns an empty array rather than 'false'
|
@@ -155,7 +154,7 @@ class ArchiveInvalidator
|
|
155 |
|
156 |
public function getRememberedArchivedReportsThatShouldBeInvalidated()
|
157 |
{
|
158 |
-
$reports = Option::getLike('%' . $this->rememberArchivedReportIdStart . '
|
159 |
|
160 |
$sitesPerDay = array();
|
161 |
|
@@ -205,9 +204,11 @@ class ArchiveInvalidator
|
|
205 |
|
206 |
public function forgetRememberedArchivedReportsToInvalidateForSite($idSite)
|
207 |
{
|
208 |
-
$id = $this->buildRememberArchivedReportIdForSite($idSite) . '
|
209 |
-
$this->deleteOptionLike($id);
|
210 |
-
|
|
|
|
|
211 |
}
|
212 |
|
213 |
/**
|
@@ -221,17 +222,22 @@ class ArchiveInvalidator
|
|
221 |
|
222 |
// The process pid is added to the end of the entry in order to support multiple concurrent transactions.
|
223 |
// So this must be a deleteLike call to get all the entries, where there used to only be one.
|
224 |
-
$this->deleteOptionLike($id);
|
225 |
}
|
226 |
|
|
|
|
|
|
|
|
|
|
|
227 |
private function deleteOptionLike($id)
|
228 |
{
|
229 |
// we're not using deleteLike since it maybe could cause deadlocks see https://github.com/matomo-org/matomo/issues/15545
|
230 |
// we want to reduce number of rows scanned and only delete specific primary key
|
231 |
-
$keys = Option::getLike('%' . $id . '%');
|
232 |
|
233 |
if (empty($keys)) {
|
234 |
-
return;
|
235 |
}
|
236 |
|
237 |
$keys = array_keys($keys);
|
@@ -239,7 +245,8 @@ class ArchiveInvalidator
|
|
239 |
$placeholders = Common::getSqlStringFieldsArray($keys);
|
240 |
|
241 |
$table = Common::prefixTable('option');
|
242 |
-
Db::query('DELETE FROM `' . $table . '` WHERE `option_name` IN (' . $placeholders . ')', $keys);
|
|
|
243 |
}
|
244 |
|
245 |
/**
|
@@ -251,6 +258,7 @@ class ArchiveInvalidator
|
|
251 |
* @param bool $forceInvalidateNonexistantRanges set true to force inserting rows for ranges in archive_invalidations
|
252 |
* @param string $name null to make sure every plugin is archived when this invalidation is processed by core:archive,
|
253 |
* or a plugin name to only archive the specific plugin.
|
|
|
254 |
* @return InvalidationResult
|
255 |
* @throws \Exception
|
256 |
*/
|
@@ -281,6 +289,7 @@ class ArchiveInvalidator
|
|
281 |
&& count($dates) == 1
|
282 |
&& ((string)$dates[0]) == ((string)Date::factoryInTimezone('today', $tz))
|
283 |
) {
|
|
|
284 |
$hasMoreThanJustToday[$idSite] = false;
|
285 |
}
|
286 |
}
|
@@ -316,20 +325,27 @@ class ArchiveInvalidator
|
|
316 |
|
317 |
$isInvalidatingDays = $period == 'day' || $cascadeDown || empty($period);
|
318 |
$isNotInvalidatingSegment = empty($segment) || empty($segment->getString());
|
|
|
319 |
if ($isInvalidatingDays
|
320 |
&& $isNotInvalidatingSegment
|
321 |
) {
|
|
|
|
|
|
|
322 |
foreach ($idSites as $idSite) {
|
323 |
foreach ($dates as $date) {
|
324 |
if (is_string($date)) {
|
325 |
$date = Date::factory($date);
|
326 |
}
|
327 |
|
328 |
-
$this->forgetRememberedArchivedReportsToInvalidate($idSite, $date);
|
329 |
}
|
330 |
}
|
|
|
|
|
|
|
|
|
331 |
}
|
332 |
-
Cache::clearCacheGeneral();
|
333 |
|
334 |
return $invalidationInfo;
|
335 |
}
|
@@ -457,7 +473,7 @@ class ArchiveInvalidator
|
|
457 |
*/
|
458 |
public function reArchiveReport($idSites, string $plugin = null, string $report = null, Date $startDate = null, Segment $segment = null)
|
459 |
{
|
460 |
-
$date2 = Date::
|
461 |
|
462 |
$earliestDateToRearchive = $this->getEarliestDateToRearchive();
|
463 |
if (empty($startDate)) {
|
30 |
use Piwik\SettingsServer;
|
31 |
use Piwik\Site;
|
32 |
use Piwik\Tracker\Cache;
|
|
|
33 |
use Psr\Log\LoggerInterface;
|
34 |
|
35 |
/**
|
96 |
// we do not really have to get the value first. we could simply always try to call set() and it would update or
|
97 |
// insert the record if needed but we do not want to lock the table (especially since there are still some
|
98 |
// MyISAM installations)
|
99 |
+
$values = Option::getLike('%' . str_replace('_', '\_', $this->rememberArchivedReportIdStart) . '%');
|
100 |
|
101 |
$all = [];
|
102 |
foreach ($values as $name => $value) {
|
121 |
// we do not really have to get the value first. we could simply always try to call set() and it would update or
|
122 |
// insert the record if needed but we do not want to lock the table (especially since there are still some
|
123 |
// MyISAM installations)
|
124 |
+
$value = Option::getLike('%' . str_replace('_', '\_', $key) . '%');
|
125 |
}
|
126 |
|
127 |
// getLike() returns an empty array rather than 'false'
|
154 |
|
155 |
public function getRememberedArchivedReportsThatShouldBeInvalidated()
|
156 |
{
|
157 |
+
$reports = Option::getLike('%' . str_replace('_', '\_', $this->rememberArchivedReportIdStart) . '%\_%');
|
158 |
|
159 |
$sitesPerDay = array();
|
160 |
|
204 |
|
205 |
public function forgetRememberedArchivedReportsToInvalidateForSite($idSite)
|
206 |
{
|
207 |
+
$id = $this->buildRememberArchivedReportIdForSite($idSite) . '_';
|
208 |
+
$hasDeletedSomething = $this->deleteOptionLike($id);
|
209 |
+
if ($hasDeletedSomething) {
|
210 |
+
Cache::clearCacheGeneral();
|
211 |
+
}
|
212 |
}
|
213 |
|
214 |
/**
|
222 |
|
223 |
// The process pid is added to the end of the entry in order to support multiple concurrent transactions.
|
224 |
// So this must be a deleteLike call to get all the entries, where there used to only be one.
|
225 |
+
return $this->deleteOptionLike($id);
|
226 |
}
|
227 |
|
228 |
+
/**
|
229 |
+
* @param $id
|
230 |
+
* @return bool true if a record was deleted, false otherwise.
|
231 |
+
* @throws \Zend_Db_Statement_Exception
|
232 |
+
*/
|
233 |
private function deleteOptionLike($id)
|
234 |
{
|
235 |
// we're not using deleteLike since it maybe could cause deadlocks see https://github.com/matomo-org/matomo/issues/15545
|
236 |
// we want to reduce number of rows scanned and only delete specific primary key
|
237 |
+
$keys = Option::getLike('%' . str_replace('_', '\_', $id) . '%');
|
238 |
|
239 |
if (empty($keys)) {
|
240 |
+
return false;
|
241 |
}
|
242 |
|
243 |
$keys = array_keys($keys);
|
245 |
$placeholders = Common::getSqlStringFieldsArray($keys);
|
246 |
|
247 |
$table = Common::prefixTable('option');
|
248 |
+
$db = Db::query('DELETE FROM `' . $table . '` WHERE `option_name` IN (' . $placeholders . ')', $keys);
|
249 |
+
return (bool) $db->rowCount();
|
250 |
}
|
251 |
|
252 |
/**
|
258 |
* @param bool $forceInvalidateNonexistantRanges set true to force inserting rows for ranges in archive_invalidations
|
259 |
* @param string $name null to make sure every plugin is archived when this invalidation is processed by core:archive,
|
260 |
* or a plugin name to only archive the specific plugin.
|
261 |
+
* @param bool $ignorePurgeLogDataDate
|
262 |
* @return InvalidationResult
|
263 |
* @throws \Exception
|
264 |
*/
|
289 |
&& count($dates) == 1
|
290 |
&& ((string)$dates[0]) == ((string)Date::factoryInTimezone('today', $tz))
|
291 |
) {
|
292 |
+
// date is for today
|
293 |
$hasMoreThanJustToday[$idSite] = false;
|
294 |
}
|
295 |
}
|
325 |
|
326 |
$isInvalidatingDays = $period == 'day' || $cascadeDown || empty($period);
|
327 |
$isNotInvalidatingSegment = empty($segment) || empty($segment->getString());
|
328 |
+
|
329 |
if ($isInvalidatingDays
|
330 |
&& $isNotInvalidatingSegment
|
331 |
) {
|
332 |
+
|
333 |
+
$hasDeletedAny = false;
|
334 |
+
|
335 |
foreach ($idSites as $idSite) {
|
336 |
foreach ($dates as $date) {
|
337 |
if (is_string($date)) {
|
338 |
$date = Date::factory($date);
|
339 |
}
|
340 |
|
341 |
+
$hasDeletedAny = $this->forgetRememberedArchivedReportsToInvalidate($idSite, $date) || $hasDeletedAny;
|
342 |
}
|
343 |
}
|
344 |
+
|
345 |
+
if ($hasDeletedAny) {
|
346 |
+
Cache::clearCacheGeneral();
|
347 |
+
}
|
348 |
}
|
|
|
349 |
|
350 |
return $invalidationInfo;
|
351 |
}
|
473 |
*/
|
474 |
public function reArchiveReport($idSites, string $plugin = null, string $report = null, Date $startDate = null, Segment $segment = null)
|
475 |
{
|
476 |
+
$date2 = Date::today();
|
477 |
|
478 |
$earliestDateToRearchive = $this->getEarliestDateToRearchive();
|
479 |
if (empty($startDate)) {
|
app/core/Archive/DataTableFactory.php
CHANGED
@@ -11,7 +11,6 @@ namespace Piwik\Archive;
|
|
11 |
|
12 |
use Piwik\DataTable;
|
13 |
use Piwik\DataTable\Row;
|
14 |
-
use Piwik\Period;
|
15 |
use Piwik\Segment;
|
16 |
use Piwik\Site;
|
17 |
|
11 |
|
12 |
use Piwik\DataTable;
|
13 |
use Piwik\DataTable\Row;
|
|
|
14 |
use Piwik\Segment;
|
15 |
use Piwik\Site;
|
16 |
|
app/core/ArchiveProcessor.php
CHANGED
@@ -679,8 +679,9 @@ class ArchiveProcessor
|
|
679 |
// vs here we would use
|
680 |
// userId!@%40matomo.org;userId!=hello%40matomo.org;visitorType==new
|
681 |
// thus these would result in different segment hashes and therefore the reports would either show 0 or archive the data twice
|
682 |
-
$
|
683 |
-
|
|
|
684 |
return;
|
685 |
}
|
686 |
|
679 |
// vs here we would use
|
680 |
// userId!@%40matomo.org;userId!=hello%40matomo.org;visitorType==new
|
681 |
// thus these would result in different segment hashes and therefore the reports would either show 0 or archive the data twice
|
682 |
+
$originSegmentString = $params->getSegment()->getOriginalString();
|
683 |
+
$newSegment = Segment::combine($originSegmentString, SegmentExpression::AND_DELIMITER, $segment);
|
684 |
+
if (!empty($originSegmentString) && $newSegment === $segment && $params->getRequestedPlugin() === $plugin) { // being processed now
|
685 |
return;
|
686 |
}
|
687 |
|
app/core/ArchiveProcessor/ArchivingStatus.php
CHANGED
@@ -9,11 +9,9 @@
|
|
9 |
|
10 |
namespace Piwik\ArchiveProcessor;
|
11 |
|
12 |
-
use Piwik\Common;
|
13 |
use Piwik\Concurrency\Lock;
|
14 |
use Piwik\Concurrency\LockBackend;
|
15 |
use Piwik\Container\StaticContainer;
|
16 |
-
use Piwik\SettingsPiwik;
|
17 |
|
18 |
class ArchivingStatus
|
19 |
{
|
9 |
|
10 |
namespace Piwik\ArchiveProcessor;
|
11 |
|
|
|
12 |
use Piwik\Concurrency\Lock;
|
13 |
use Piwik\Concurrency\LockBackend;
|
14 |
use Piwik\Container\StaticContainer;
|
|
|
15 |
|
16 |
class ArchivingStatus
|
17 |
{
|
app/core/ArchiveProcessor/Loader.php
CHANGED
@@ -468,6 +468,10 @@ class Loader
|
|
468 |
return false;
|
469 |
}
|
470 |
|
|
|
|
|
|
|
|
|
471 |
/** @var SegmentArchiving */
|
472 |
$segmentArchiving = StaticContainer::get(SegmentArchiving::class);
|
473 |
$segmentInfo = $segmentArchiving->findSegmentForHash($params->getSegment()->getHash(), $params->getSite()->getId());
|
468 |
return false;
|
469 |
}
|
470 |
|
471 |
+
if (!empty($params->getRequestedPlugin()) && Rules::isSegmentPluginArchivingDisabled($params->getRequestedPlugin(), $params->getSite()->getId())) {
|
472 |
+
return true;
|
473 |
+
}
|
474 |
+
|
475 |
/** @var SegmentArchiving */
|
476 |
$segmentArchiving = StaticContainer::get(SegmentArchiving::class);
|
477 |
$segmentInfo = $segmentArchiving->findSegmentForHash($params->getSegment()->getHash(), $params->getSite()->getId());
|
app/core/ArchiveProcessor/LoaderLock.php
CHANGED
@@ -18,6 +18,10 @@ class LoaderLock
|
|
18 |
const MAX_LOCK_TIME = 60; //in seconds
|
19 |
protected $id;
|
20 |
|
|
|
|
|
|
|
|
|
21 |
public function __construct($id)
|
22 |
{
|
23 |
// instanceId is needed for multi tenant database solution
|
18 |
const MAX_LOCK_TIME = 60; //in seconds
|
19 |
protected $id;
|
20 |
|
21 |
+
/**
|
22 |
+
* @param string $id
|
23 |
+
* @throws \Exception
|
24 |
+
*/
|
25 |
public function __construct($id)
|
26 |
{
|
27 |
// instanceId is needed for multi tenant database solution
|
app/core/ArchiveProcessor/Parameters.php
CHANGED
@@ -9,9 +9,6 @@
|
|
9 |
|
10 |
namespace Piwik\ArchiveProcessor;
|
11 |
|
12 |
-
use Piwik\Cache;
|
13 |
-
use Piwik\DataAccess\Model;
|
14 |
-
use Piwik\DataAccess\RawLogDao;
|
15 |
use Piwik\Date;
|
16 |
use Piwik\Log;
|
17 |
use Piwik\Period;
|
9 |
|
10 |
namespace Piwik\ArchiveProcessor;
|
11 |
|
|
|
|
|
|
|
12 |
use Piwik\Date;
|
13 |
use Piwik\Log;
|
14 |
use Piwik\Period;
|
app/core/ArchiveProcessor/Rules.php
CHANGED
@@ -9,17 +9,15 @@
|
|
9 |
namespace Piwik\ArchiveProcessor;
|
10 |
|
11 |
use Exception;
|
12 |
-
use Piwik\Common;
|
13 |
use Piwik\Config;
|
|
|
14 |
use Piwik\DataAccess\ArchiveWriter;
|
15 |
-
use Piwik\DataAccess\Model;
|
16 |
use Piwik\Date;
|
17 |
use Piwik\Log;
|
18 |
use Piwik\Option;
|
19 |
use Piwik\Piwik;
|
20 |
use Piwik\Plugin\Manager;
|
21 |
use Piwik\Plugins\CoreAdminHome\Controller;
|
22 |
-
use Piwik\Scheduler\Task;
|
23 |
use Piwik\Segment;
|
24 |
use Piwik\SettingsPiwik;
|
25 |
use Piwik\SettingsServer;
|
@@ -58,7 +56,7 @@ class Rules
|
|
58 |
public static function getDoneStringFlagFor(array $idSites, $segment, $periodLabel, $plugin)
|
59 |
{
|
60 |
if (!empty($plugin)
|
61 |
-
|
62 |
) {
|
63 |
return self::getDoneFlagArchiveContainsOnePlugin($segment, $plugin);
|
64 |
}
|
@@ -101,7 +99,7 @@ class Rules
|
|
101 |
|
102 |
public static function getDoneFlagArchiveContainsOnePlugin(Segment $segment, $plugin)
|
103 |
{
|
104 |
-
return 'done' . $segment->getHash() . '.' . $plugin
|
105 |
}
|
106 |
|
107 |
public static function getDoneFlagArchiveContainsAllPlugins(Segment $segment)
|
@@ -131,8 +129,11 @@ class Rules
|
|
131 |
}
|
132 |
|
133 |
public static function getMinTimeProcessedForInProgressArchive(
|
134 |
-
|
135 |
-
|
|
|
|
|
|
|
136 |
$todayArchiveTimeToLive = self::getPeriodArchiveTimeToLiveDefault($period->getLabel());
|
137 |
|
138 |
$now = time();
|
@@ -142,7 +143,7 @@ class Rules
|
|
142 |
$isArchivingDisabled = Rules::isArchivingDisabledFor($idSites, $segment, $period->getLabel());
|
143 |
if ($isArchivingDisabled) {
|
144 |
if ($period->getNumberOfSubperiods() == 0
|
145 |
-
|
146 |
) {
|
147 |
// Today: accept any recent enough archive
|
148 |
$minimumArchiveTime = false;
|
@@ -150,7 +151,8 @@ class Rules
|
|
150 |
// This week, this month, this year:
|
151 |
// accept any archive that was processed today after 00:00:01 this morning
|
152 |
$timezone = $site->getTimezone();
|
153 |
-
$minimumArchiveTime = Date::factory(Date::factory('now',
|
|
|
154 |
}
|
155 |
}
|
156 |
return $minimumArchiveTime;
|
@@ -214,7 +216,7 @@ class Rules
|
|
214 |
|
215 |
if ($periodLabel === 'range') {
|
216 |
if (isset($generalConfig['archiving_range_force_on_browser_request'])
|
217 |
-
|
218 |
) {
|
219 |
Log::debug("Not forcing archiving for range period.");
|
220 |
return $isArchivingEnabled;
|
@@ -229,8 +231,8 @@ class Rules
|
|
229 |
}
|
230 |
|
231 |
if (!$isArchivingEnabled
|
232 |
-
|
233 |
-
|
234 |
) {
|
235 |
Log::debug("Archiving is disabled because of config setting browser_archiving_disabled_enforce=1 or because the segment is selected to be pre-processed.");
|
236 |
return false;
|
@@ -315,7 +317,7 @@ class Rules
|
|
315 |
$segmentsToProcessUrlDecoded = array_map('urldecode', $segmentsToProcess);
|
316 |
|
317 |
return in_array($segment, $segmentsToProcess)
|
318 |
-
|
319 |
}
|
320 |
|
321 |
/**
|
@@ -323,8 +325,11 @@ class Rules
|
|
323 |
*
|
324 |
* @return string[]
|
325 |
*/
|
326 |
-
public static function getSelectableDoneFlagValues(
|
327 |
-
|
|
|
|
|
|
|
328 |
$possibleValues = array(ArchiveWriter::DONE_OK, ArchiveWriter::DONE_OK_TEMPORARY);
|
329 |
|
330 |
if ($includeInvalidated) {
|
@@ -356,4 +361,24 @@ class Rules
|
|
356 |
{
|
357 |
return Config::getInstance()->General['rearchive_reports_in_past_exclude_segments'] != 1;
|
358 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
359 |
}
|
9 |
namespace Piwik\ArchiveProcessor;
|
10 |
|
11 |
use Exception;
|
|
|
12 |
use Piwik\Config;
|
13 |
+
use Piwik\Config\GeneralConfig;
|
14 |
use Piwik\DataAccess\ArchiveWriter;
|
|
|
15 |
use Piwik\Date;
|
16 |
use Piwik\Log;
|
17 |
use Piwik\Option;
|
18 |
use Piwik\Piwik;
|
19 |
use Piwik\Plugin\Manager;
|
20 |
use Piwik\Plugins\CoreAdminHome\Controller;
|
|
|
21 |
use Piwik\Segment;
|
22 |
use Piwik\SettingsPiwik;
|
23 |
use Piwik\SettingsServer;
|
56 |
public static function getDoneStringFlagFor(array $idSites, $segment, $periodLabel, $plugin)
|
57 |
{
|
58 |
if (!empty($plugin)
|
59 |
+
&& !self::shouldProcessReportsAllPlugins($idSites, $segment, $periodLabel)
|
60 |
) {
|
61 |
return self::getDoneFlagArchiveContainsOnePlugin($segment, $plugin);
|
62 |
}
|
99 |
|
100 |
public static function getDoneFlagArchiveContainsOnePlugin(Segment $segment, $plugin)
|
101 |
{
|
102 |
+
return 'done' . $segment->getHash() . '.' . $plugin;
|
103 |
}
|
104 |
|
105 |
public static function getDoneFlagArchiveContainsAllPlugins(Segment $segment)
|
129 |
}
|
130 |
|
131 |
public static function getMinTimeProcessedForInProgressArchive(
|
132 |
+
Date $dateStart,
|
133 |
+
\Piwik\Period $period,
|
134 |
+
Segment $segment,
|
135 |
+
Site $site
|
136 |
+
) {
|
137 |
$todayArchiveTimeToLive = self::getPeriodArchiveTimeToLiveDefault($period->getLabel());
|
138 |
|
139 |
$now = time();
|
143 |
$isArchivingDisabled = Rules::isArchivingDisabledFor($idSites, $segment, $period->getLabel());
|
144 |
if ($isArchivingDisabled) {
|
145 |
if ($period->getNumberOfSubperiods() == 0
|
146 |
+
&& $dateStart->getTimestamp() <= $now
|
147 |
) {
|
148 |
// Today: accept any recent enough archive
|
149 |
$minimumArchiveTime = false;
|
151 |
// This week, this month, this year:
|
152 |
// accept any archive that was processed today after 00:00:01 this morning
|
153 |
$timezone = $site->getTimezone();
|
154 |
+
$minimumArchiveTime = Date::factory(Date::factory('now',
|
155 |
+
$timezone)->getDateStartUTC())->setTimezone($timezone)->getTimestamp();
|
156 |
}
|
157 |
}
|
158 |
return $minimumArchiveTime;
|
216 |
|
217 |
if ($periodLabel === 'range') {
|
218 |
if (isset($generalConfig['archiving_range_force_on_browser_request'])
|
219 |
+
&& $generalConfig['archiving_range_force_on_browser_request'] == false
|
220 |
) {
|
221 |
Log::debug("Not forcing archiving for range period.");
|
222 |
return $isArchivingEnabled;
|
231 |
}
|
232 |
|
233 |
if (!$isArchivingEnabled
|
234 |
+
&& (!self::isBrowserArchivingAvailableForSegments() || self::isSegmentPreProcessed($idSites, $segment))
|
235 |
+
&& !SettingsServer::isArchivePhpTriggered() // Only applies when we are not running core:archive command
|
236 |
) {
|
237 |
Log::debug("Archiving is disabled because of config setting browser_archiving_disabled_enforce=1 or because the segment is selected to be pre-processed.");
|
238 |
return false;
|
317 |
$segmentsToProcessUrlDecoded = array_map('urldecode', $segmentsToProcess);
|
318 |
|
319 |
return in_array($segment, $segmentsToProcess)
|
320 |
+
|| in_array($segment, $segmentsToProcessUrlDecoded);
|
321 |
}
|
322 |
|
323 |
/**
|
325 |
*
|
326 |
* @return string[]
|
327 |
*/
|
328 |
+
public static function getSelectableDoneFlagValues(
|
329 |
+
$includeInvalidated = true,
|
330 |
+
Parameters $params = null,
|
331 |
+
$checkAuthorizedToArchive = true
|
332 |
+
) {
|
333 |
$possibleValues = array(ArchiveWriter::DONE_OK, ArchiveWriter::DONE_OK_TEMPORARY);
|
334 |
|
335 |
if ($includeInvalidated) {
|
361 |
{
|
362 |
return Config::getInstance()->General['rearchive_reports_in_past_exclude_segments'] != 1;
|
363 |
}
|
364 |
+
|
365 |
+
public static function isSegmentPluginArchivingDisabled($pluginName, $siteId = null)
|
366 |
+
{
|
367 |
+
$pluginArchivingSetting = GeneralConfig::getConfigValue('disable_archiving_segment_for_plugins', $siteId);
|
368 |
+
|
369 |
+
if (empty($pluginArchivingSetting)) {
|
370 |
+
return false;
|
371 |
+
}
|
372 |
+
|
373 |
+
if (is_string($pluginArchivingSetting)) {
|
374 |
+
$pluginArchivingSetting = explode(",", $pluginArchivingSetting);
|
375 |
+
$pluginArchivingSetting = array_filter($pluginArchivingSetting, function($plugin){
|
376 |
+
return Manager::getInstance()->isValidPluginName($plugin);
|
377 |
+
});
|
378 |
+
}
|
379 |
+
|
380 |
+
$pluginArchivingSetting = array_map('strtolower', $pluginArchivingSetting);
|
381 |
+
|
382 |
+
return in_array(strtolower($pluginName), $pluginArchivingSetting);
|
383 |
+
}
|
384 |
}
|
app/core/AssetManager.php
CHANGED
@@ -16,6 +16,7 @@ use Piwik\AssetManager\UIAssetCacheBuster;
|
|
16 |
use Piwik\AssetManager\UIAssetFetcher\JScriptUIAssetFetcher;
|
17 |
use Piwik\AssetManager\UIAssetFetcher\StaticUIAssetFetcher;
|
18 |
use Piwik\AssetManager\UIAssetFetcher\StylesheetUIAssetFetcher;
|
|
|
19 |
use Piwik\AssetManager\UIAssetFetcher;
|
20 |
use Piwik\AssetManager\UIAssetMerger\JScriptUIAssetMerger;
|
21 |
use Piwik\AssetManager\UIAssetMerger\StylesheetUIAssetMerger;
|
@@ -44,9 +45,11 @@ class AssetManager extends Singleton
|
|
44 |
|
45 |
const CSS_IMPORT_DIRECTIVE = "<link rel=\"stylesheet\" type=\"text/css\" href=\"%s\" />\n";
|
46 |
const JS_IMPORT_DIRECTIVE = "<script type=\"text/javascript\" src=\"%s\"></script>\n";
|
|
|
47 |
const GET_CSS_MODULE_ACTION = "index.php?module=Proxy&action=getCss";
|
48 |
const GET_CORE_JS_MODULE_ACTION = "index.php?module=Proxy&action=getCoreJs";
|
49 |
const GET_NON_CORE_JS_MODULE_ACTION = "index.php?module=Proxy&action=getNonCoreJs";
|
|
|
50 |
|
51 |
/**
|
52 |
* @var UIAssetCacheBuster
|
@@ -149,11 +152,27 @@ class AssetManager extends Singleton
|
|
149 |
} else {
|
150 |
$result .= sprintf(self::JS_IMPORT_DIRECTIVE, self::GET_CORE_JS_MODULE_ACTION);
|
151 |
$result .= sprintf(self::JS_IMPORT_DIRECTIVE, self::GET_NON_CORE_JS_MODULE_ACTION);
|
|
|
|
|
152 |
}
|
153 |
|
154 |
return $result;
|
155 |
}
|
156 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
157 |
/**
|
158 |
* Return the base.less compiled to css
|
159 |
*
|
@@ -212,7 +231,22 @@ class AssetManager extends Singleton
|
|
212 |
}
|
213 |
|
214 |
/**
|
215 |
-
*
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
216 |
* @return string[]
|
217 |
*/
|
218 |
public function getLoadedPlugins($core)
|
@@ -223,7 +257,7 @@ class AssetManager extends Singleton
|
|
223 |
$pluginName = $plugin->getPluginName();
|
224 |
$pluginIsCore = Manager::getInstance()->isPluginBundledWithCore($pluginName);
|
225 |
|
226 |
-
if (($pluginIsCore && $core) || (!$pluginIsCore && !$core)) {
|
227 |
$loadedPlugins[] = $pluginName;
|
228 |
}
|
229 |
}
|
@@ -245,10 +279,40 @@ class AssetManager extends Singleton
|
|
245 |
} else {
|
246 |
$assetsToRemove[] = $this->getMergedNonCoreJSAsset();
|
247 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
248 |
}
|
249 |
} else {
|
250 |
$assetsToRemove[] = $this->getMergedCoreJSAsset();
|
251 |
$assetsToRemove[] = $this->getMergedNonCoreJSAsset();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
252 |
}
|
253 |
|
254 |
$this->removeAssets($assetsToRemove);
|
@@ -285,11 +349,11 @@ class AssetManager extends Singleton
|
|
285 |
if (Config::getInstance()->Development['disable_merged_assets'] == 1) {
|
286 |
return true;
|
287 |
}
|
288 |
-
|
289 |
if (isset($_GET['disable_merged_assets']) && $_GET['disable_merged_assets'] == 1) {
|
290 |
return true;
|
291 |
}
|
292 |
-
|
293 |
return false;
|
294 |
}
|
295 |
|
@@ -316,7 +380,8 @@ class AssetManager extends Singleton
|
|
316 |
{
|
317 |
return
|
318 |
$this->getIndividualJsIncludesFromAssetFetcher($this->getCoreJScriptFetcher()) .
|
319 |
-
$this->getIndividualJsIncludesFromAssetFetcher($this->getNonCoreJScriptFetcher())
|
|
|
320 |
}
|
321 |
|
322 |
/**
|
@@ -347,6 +412,11 @@ class AssetManager extends Singleton
|
|
347 |
return new JScriptUIAssetFetcher($this->getLoadedPlugins(false), $this->theme);
|
348 |
}
|
349 |
|
|
|
|
|
|
|
|
|
|
|
350 |
/**
|
351 |
* @param string $pluginName
|
352 |
* @return boolean
|
@@ -440,12 +510,12 @@ class AssetManager extends Singleton
|
|
440 |
{
|
441 |
$mergedAsset = new InMemoryUIAsset();
|
442 |
$fetcher = new StaticUIAssetFetcher($files, $priorityOrder = array(), $theme = null);
|
443 |
-
|
444 |
$cacheBuster = UIAssetCacheBuster::getInstance();
|
445 |
|
446 |
$assetMerger = new JScriptUIAssetMerger($mergedAsset, $fetcher, $cacheBuster);
|
447 |
$assetMerger->generateFile();
|
448 |
-
|
449 |
return $mergedAsset->getContent();
|
450 |
}
|
451 |
}
|
16 |
use Piwik\AssetManager\UIAssetFetcher\JScriptUIAssetFetcher;
|
17 |
use Piwik\AssetManager\UIAssetFetcher\StaticUIAssetFetcher;
|
18 |
use Piwik\AssetManager\UIAssetFetcher\StylesheetUIAssetFetcher;
|
19 |
+
use Piwik\AssetManager\UIAssetFetcher\PluginUmdAssetFetcher;
|
20 |
use Piwik\AssetManager\UIAssetFetcher;
|
21 |
use Piwik\AssetManager\UIAssetMerger\JScriptUIAssetMerger;
|
22 |
use Piwik\AssetManager\UIAssetMerger\StylesheetUIAssetMerger;
|
45 |
|
46 |
const CSS_IMPORT_DIRECTIVE = "<link rel=\"stylesheet\" type=\"text/css\" href=\"%s\" />\n";
|
47 |
const JS_IMPORT_DIRECTIVE = "<script type=\"text/javascript\" src=\"%s\"></script>\n";
|
48 |
+
const JS_DEFER_IMPORT_DIRECTIVE = "<script type=\"text/javascript\" src=\"%s\" defer></script>\n";
|
49 |
const GET_CSS_MODULE_ACTION = "index.php?module=Proxy&action=getCss";
|
50 |
const GET_CORE_JS_MODULE_ACTION = "index.php?module=Proxy&action=getCoreJs";
|
51 |
const GET_NON_CORE_JS_MODULE_ACTION = "index.php?module=Proxy&action=getNonCoreJs";
|
52 |
+
const GET_JS_UMD_MODULE_ACTION = "index.php?module=Proxy&action=getUmdJs&chunk=";
|
53 |
|
54 |
/**
|
55 |
* @var UIAssetCacheBuster
|
152 |
} else {
|
153 |
$result .= sprintf(self::JS_IMPORT_DIRECTIVE, self::GET_CORE_JS_MODULE_ACTION);
|
154 |
$result .= sprintf(self::JS_IMPORT_DIRECTIVE, self::GET_NON_CORE_JS_MODULE_ACTION);
|
155 |
+
|
156 |
+
$result .= $this->getPluginUmdChunks();
|
157 |
}
|
158 |
|
159 |
return $result;
|
160 |
}
|
161 |
|
162 |
+
protected function getPluginUmdChunks()
|
163 |
+
{
|
164 |
+
$fetcher = $this->getPluginUmdJScriptFetcher();
|
165 |
+
|
166 |
+
$chunks = $fetcher->getChunkFiles();
|
167 |
+
|
168 |
+
$result = '';
|
169 |
+
foreach ($chunks as $chunk) {
|
170 |
+
$src = self::GET_JS_UMD_MODULE_ACTION . urlencode($chunk->getChunkName());
|
171 |
+
$result .= sprintf(self::JS_DEFER_IMPORT_DIRECTIVE, $src);
|
172 |
+
}
|
173 |
+
return $result;
|
174 |
+
}
|
175 |
+
|
176 |
/**
|
177 |
* Return the base.less compiled to css
|
178 |
*
|
231 |
}
|
232 |
|
233 |
/**
|
234 |
+
* Return a chunk JS merged file absolute location.
|
235 |
+
* If there is none, the generation process will be triggered.
|
236 |
+
*
|
237 |
+
* @param string $chunk The name of the chunk. Will either be a plugin name or an integer.
|
238 |
+
* @return UIAsset
|
239 |
+
*/
|
240 |
+
public function getMergedJavaScriptChunk($chunk)
|
241 |
+
{
|
242 |
+
$assetFetcher = $this->getPluginUmdJScriptFetcher($chunk);
|
243 |
+
$outputFile = $assetFetcher->getRequestedChunkOutputFile();
|
244 |
+
|
245 |
+
return $this->getMergedJavascript($assetFetcher, $this->getMergedUIAsset($outputFile));
|
246 |
+
}
|
247 |
+
|
248 |
+
/**
|
249 |
+
* @param boolean|"all" $core
|
250 |
* @return string[]
|
251 |
*/
|
252 |
public function getLoadedPlugins($core)
|
257 |
$pluginName = $plugin->getPluginName();
|
258 |
$pluginIsCore = Manager::getInstance()->isPluginBundledWithCore($pluginName);
|
259 |
|
260 |
+
if ($core === 'all' || ($pluginIsCore && $core) || (!$pluginIsCore && !$core)) {
|
261 |
$loadedPlugins[] = $pluginName;
|
262 |
}
|
263 |
}
|
279 |
} else {
|
280 |
$assetsToRemove[] = $this->getMergedNonCoreJSAsset();
|
281 |
}
|
282 |
+
|
283 |
+
$assetFetcher = $this->getPluginUmdJScriptFetcher();
|
284 |
+
foreach ($assetFetcher->getChunkFiles() as $chunk) {
|
285 |
+
$files = $chunk->getFiles();
|
286 |
+
|
287 |
+
$foundInChunk = false;
|
288 |
+
foreach ($files as $file) {
|
289 |
+
if (strpos($file, "/$pluginName.umd.") !== false) {
|
290 |
+
$foundInChunk = true;
|
291 |
+
}
|
292 |
+
}
|
293 |
+
|
294 |
+
if ($foundInChunk) {
|
295 |
+
$outputFile = $chunk->getOutputFile();
|
296 |
+
$asset = $this->getMergedUIAsset($outputFile);
|
297 |
+
if ($asset->exists()) {
|
298 |
+
$assetsToRemove[] = $asset;
|
299 |
+
}
|
300 |
+
break;
|
301 |
+
}
|
302 |
+
}
|
303 |
}
|
304 |
} else {
|
305 |
$assetsToRemove[] = $this->getMergedCoreJSAsset();
|
306 |
$assetsToRemove[] = $this->getMergedNonCoreJSAsset();
|
307 |
+
|
308 |
+
$assetFetcher = $this->getPluginUmdJScriptFetcher();
|
309 |
+
foreach ($assetFetcher->getChunkFiles() as $chunk) {
|
310 |
+
$outputFile = $chunk->getOutputFile();
|
311 |
+
$asset = $this->getMergedUIAsset($outputFile);
|
312 |
+
if ($asset->exists()) {
|
313 |
+
$assetsToRemove[] = $asset;
|
314 |
+
}
|
315 |
+
}
|
316 |
}
|
317 |
|
318 |
$this->removeAssets($assetsToRemove);
|
349 |
if (Config::getInstance()->Development['disable_merged_assets'] == 1) {
|
350 |
return true;
|
351 |
}
|
352 |
+
|
353 |
if (isset($_GET['disable_merged_assets']) && $_GET['disable_merged_assets'] == 1) {
|
354 |
return true;
|
355 |
}
|
356 |
+
|
357 |
return false;
|
358 |
}
|
359 |
|
380 |
{
|
381 |
return
|
382 |
$this->getIndividualJsIncludesFromAssetFetcher($this->getCoreJScriptFetcher()) .
|
383 |
+
$this->getIndividualJsIncludesFromAssetFetcher($this->getNonCoreJScriptFetcher()) .
|
384 |
+
$this->getIndividualJsIncludesFromAssetFetcher($this->getPluginUmdJScriptFetcher());
|
385 |
}
|
386 |
|
387 |
/**
|
412 |
return new JScriptUIAssetFetcher($this->getLoadedPlugins(false), $this->theme);
|
413 |
}
|
414 |
|
415 |
+
protected function getPluginUmdJScriptFetcher($chunk = null)
|
416 |
+
{
|
417 |
+
return new PluginUmdAssetFetcher($this->getLoadedPlugins('all'), $this->theme, $chunk);
|
418 |
+
}
|
419 |
+
|
420 |
/**
|
421 |
* @param string $pluginName
|
422 |
* @return boolean
|
510 |
{
|
511 |
$mergedAsset = new InMemoryUIAsset();
|
512 |
$fetcher = new StaticUIAssetFetcher($files, $priorityOrder = array(), $theme = null);
|
513 |
+
|
514 |
$cacheBuster = UIAssetCacheBuster::getInstance();
|
515 |
|
516 |
$assetMerger = new JScriptUIAssetMerger($mergedAsset, $fetcher, $cacheBuster);
|
517 |
$assetMerger->generateFile();
|
518 |
+
|
519 |
return $mergedAsset->getContent();
|
520 |
}
|
521 |
}
|
app/core/AssetManager/UIAsset.php
CHANGED
@@ -8,7 +8,6 @@
|
|
8 |
*/
|
9 |
namespace Piwik\AssetManager;
|
10 |
|
11 |
-
use Exception;
|
12 |
|
13 |
abstract class UIAsset
|
14 |
{
|
8 |
*/
|
9 |
namespace Piwik\AssetManager;
|
10 |
|
|
|
11 |
|
12 |
abstract class UIAsset
|
13 |
{
|
app/core/AssetManager/UIAssetFetcher/Chunk.php
ADDED
@@ -0,0 +1,69 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Matomo - free/libre analytics platform
|
4 |
+
*
|
5 |
+
* @link https://matomo.org
|
6 |
+
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
7 |
+
*
|
8 |
+
*/
|
9 |
+
|
10 |
+
namespace Piwik\AssetManager\UIAssetFetcher;
|
11 |
+
|
12 |
+
class Chunk
|
13 |
+
{
|
14 |
+
/**
|
15 |
+
* @var string
|
16 |
+
*/
|
17 |
+
private $chunkName;
|
18 |
+
|
19 |
+
/**
|
20 |
+
* @var string[]
|
21 |
+
*/
|
22 |
+
private $files;
|
23 |
+
|
24 |
+
public function __construct($chunkName, $files)
|
25 |
+
{
|
26 |
+
$this->chunkName = $chunkName;
|
27 |
+
$this->files = $files;
|
28 |
+
}
|
29 |
+
|
30 |
+
/**
|
31 |
+
* @return string
|
32 |
+
*/
|
33 |
+
public function getOutputFile(): string
|
34 |
+
{
|
35 |
+
return "asset_manager_chunk.{$this->chunkName}.js";
|
36 |
+
}
|
37 |
+
|
38 |
+
/**
|
39 |
+
* @return string[]
|
40 |
+
*/
|
41 |
+
public function getFiles(): array
|
42 |
+
{
|
43 |
+
return $this->files;
|
44 |
+
}
|
45 |
+
|
46 |
+
/**
|
47 |
+
* @param string[] $files
|
48 |
+
*/
|
49 |
+
public function setFiles(array $files): void
|
50 |
+
{
|
51 |
+
$this->files = $files;
|
52 |
+
}
|
53 |
+
|
54 |
+
/**
|
55 |
+
* @return string
|
56 |
+
*/
|
57 |
+
public function getChunkName(): string
|
58 |
+
{
|
59 |
+
return $this->chunkName;
|
60 |
+
}
|
61 |
+
|
62 |
+
/**
|
63 |
+
* @param string $chunkName
|
64 |
+
*/
|
65 |
+
public function setChunkName(string $chunkName): void
|
66 |
+
{
|
67 |
+
$this->chunkName = $chunkName;
|
68 |
+
}
|
69 |
+
}
|
app/core/AssetManager/UIAssetFetcher/JScriptUIAssetFetcher.php
CHANGED
@@ -9,7 +9,6 @@
|
|
9 |
namespace Piwik\AssetManager\UIAssetFetcher;
|
10 |
|
11 |
use Piwik\AssetManager\UIAssetFetcher;
|
12 |
-
use Piwik\Development;
|
13 |
use Piwik\Piwik;
|
14 |
|
15 |
class JScriptUIAssetFetcher extends UIAssetFetcher
|
@@ -18,7 +17,6 @@ class JScriptUIAssetFetcher extends UIAssetFetcher
|
|
18 |
protected function retrieveFileLocations()
|
19 |
{
|
20 |
if (!empty($this->plugins)) {
|
21 |
-
|
22 |
/**
|
23 |
* Triggered when gathering the list of all JavaScript files needed by Piwik
|
24 |
* and its plugins.
|
@@ -44,8 +42,6 @@ class JScriptUIAssetFetcher extends UIAssetFetcher
|
|
44 |
* @param string[] $jsFiles The JavaScript files to load.
|
45 |
*/
|
46 |
Piwik::postEvent('AssetManager.getJavaScriptFiles', array(&$this->fileLocations), null, $this->plugins);
|
47 |
-
|
48 |
-
$this->addUmdFilesIfDetected($this->plugins);
|
49 |
}
|
50 |
|
51 |
$this->addThemeFiles();
|
@@ -74,8 +70,10 @@ class JScriptUIAssetFetcher extends UIAssetFetcher
|
|
74 |
{
|
75 |
return array(
|
76 |
'node_modules/jquery/dist/jquery.min.js',
|
|
|
77 |
'node_modules/materialize-css/dist/js/materialize.min.js', // so jquery ui datepicker overrides materializecss
|
78 |
'node_modules/jquery-ui-dist/jquery-ui.min.js',
|
|
|
79 |
"plugins/CoreHome/javascripts/materialize-bc.js",
|
80 |
"node_modules/jquery.browser/dist/jquery.browser.min.js",
|
81 |
'node_modules/',
|
@@ -94,18 +92,4 @@ class JScriptUIAssetFetcher extends UIAssetFetcher
|
|
94 |
'tests/',
|
95 |
);
|
96 |
}
|
97 |
-
|
98 |
-
private function addUmdFilesIfDetected($plugins)
|
99 |
-
{
|
100 |
-
foreach ($plugins as $plugin) {
|
101 |
-
$devUmd = "plugins/$plugin/vue/dist/$plugin.development.umd.js";
|
102 |
-
$minifiedUmd = "plugins/$plugin/vue/dist/$plugin.umd.min.js";
|
103 |
-
|
104 |
-
if (Development::isEnabled() && is_file(PIWIK_INCLUDE_PATH . '/' . $devUmd)) {
|
105 |
-
$this->fileLocations[] = $devUmd;
|
106 |
-
} else if (is_file(PIWIK_INCLUDE_PATH . '/' . $minifiedUmd)) {
|
107 |
-
$this->fileLocations[] = $minifiedUmd;
|
108 |
-
}
|
109 |
-
}
|
110 |
-
}
|
111 |
}
|
9 |
namespace Piwik\AssetManager\UIAssetFetcher;
|
10 |
|
11 |
use Piwik\AssetManager\UIAssetFetcher;
|
|
|
12 |
use Piwik\Piwik;
|
13 |
|
14 |
class JScriptUIAssetFetcher extends UIAssetFetcher
|
17 |
protected function retrieveFileLocations()
|
18 |
{
|
19 |
if (!empty($this->plugins)) {
|
|
|
20 |
/**
|
21 |
* Triggered when gathering the list of all JavaScript files needed by Piwik
|
22 |
* and its plugins.
|
42 |
* @param string[] $jsFiles The JavaScript files to load.
|
43 |
*/
|
44 |
Piwik::postEvent('AssetManager.getJavaScriptFiles', array(&$this->fileLocations), null, $this->plugins);
|
|
|
|
|
45 |
}
|
46 |
|
47 |
$this->addThemeFiles();
|
70 |
{
|
71 |
return array(
|
72 |
'node_modules/jquery/dist/jquery.min.js',
|
73 |
+
'node_modules/jquery/dist/jquery.js',
|
74 |
'node_modules/materialize-css/dist/js/materialize.min.js', // so jquery ui datepicker overrides materializecss
|
75 |
'node_modules/jquery-ui-dist/jquery-ui.min.js',
|
76 |
+
'node_modules/jquery-ui-dist/jquery-ui.js',
|
77 |
"plugins/CoreHome/javascripts/materialize-bc.js",
|
78 |
"node_modules/jquery.browser/dist/jquery.browser.min.js",
|
79 |
'node_modules/',
|
92 |
'tests/',
|
93 |
);
|
94 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
95 |
}
|
app/core/AssetManager/UIAssetFetcher/PluginUmdAssetFetcher.php
ADDED
@@ -0,0 +1,297 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Matomo - free/libre analytics platform
|
4 |
+
*
|
5 |
+
* @link https://matomo.org
|
6 |
+
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
7 |
+
*
|
8 |
+
*/
|
9 |
+
|
10 |
+
namespace Piwik\AssetManager\UIAssetFetcher;
|
11 |
+
|
12 |
+
use Piwik\AssetManager\UIAssetFetcher;
|
13 |
+
use Piwik\Cache;
|
14 |
+
use Piwik\Config;
|
15 |
+
use Piwik\Development;
|
16 |
+
use Piwik\Plugin\Manager;
|
17 |
+
|
18 |
+
class PluginUmdAssetFetcher extends UIAssetFetcher
|
19 |
+
{
|
20 |
+
/**
|
21 |
+
* @var string
|
22 |
+
*/
|
23 |
+
private $requestedChunk;
|
24 |
+
|
25 |
+
/**
|
26 |
+
* @var boolean
|
27 |
+
*/
|
28 |
+
private $loadIndividually;
|
29 |
+
|
30 |
+
/**
|
31 |
+
* @var int|null
|
32 |
+
*/
|
33 |
+
private $chunkCount;
|
34 |
+
|
35 |
+
public function __construct($plugins, $theme, $chunk, $loadIndividually = null, $chunkCount = null)
|
36 |
+
{
|
37 |
+
parent::__construct($plugins, $theme);
|
38 |
+
|
39 |
+
if ($loadIndividually === null) {
|
40 |
+
$loadIndividually = self::getDefaultLoadIndividually();
|
41 |
+
}
|
42 |
+
|
43 |
+
if ($chunkCount === null) {
|
44 |
+
$chunkCount = self::getDefaultChunkCount();
|
45 |
+
}
|
46 |
+
|
47 |
+
$this->requestedChunk = $chunk;
|
48 |
+
$this->loadIndividually = $loadIndividually;
|
49 |
+
$this->chunkCount = $chunkCount;
|
50 |
+
|
51 |
+
if (!$this->loadIndividually && (!is_int($chunkCount) || $chunkCount <= 0)) {
|
52 |
+
throw new \Exception("Invalid chunk count: $chunkCount");
|
53 |
+
}
|
54 |
+
}
|
55 |
+
|
56 |
+
public function getRequestedChunkOutputFile()
|
57 |
+
{
|
58 |
+
return "asset_manager_chunk.{$this->requestedChunk}.js";
|
59 |
+
}
|
60 |
+
|
61 |
+
/**
|
62 |
+
* @return Chunk[]
|
63 |
+
*/
|
64 |
+
public function getChunkFiles()
|
65 |
+
{
|
66 |
+
$allPluginUmds = $this->getAllPluginUmds();
|
67 |
+
|
68 |
+
if ($this->loadIndividually) {
|
69 |
+
return $allPluginUmds;
|
70 |
+
}
|
71 |
+
|
72 |
+
$totalSize = $this->getTotalChunkSize($allPluginUmds);
|
73 |
+
|
74 |
+
$chunkFiles = $this->dividePluginUmdsByChunkCount($allPluginUmds, $totalSize);
|
75 |
+
|
76 |
+
$chunks = [];
|
77 |
+
foreach ($chunkFiles as $index => $jsFiles) {
|
78 |
+
$chunks[] = new Chunk($index, $jsFiles);
|
79 |
+
}
|
80 |
+
return $chunks;
|
81 |
+
}
|
82 |
+
|
83 |
+
private function getTotalChunkSize($allPluginUmds)
|
84 |
+
{
|
85 |
+
$totalSize = 0;
|
86 |
+
foreach ($allPluginUmds as $chunk) {
|
87 |
+
$path = PIWIK_INCLUDE_PATH . '/' . $chunk->getFiles()[0];
|
88 |
+
if (is_file($path)) {
|
89 |
+
$totalSize += filesize($path);
|
90 |
+
}
|
91 |
+
}
|
92 |
+
return $totalSize;
|
93 |
+
}
|
94 |
+
|
95 |
+
private function getAllPluginUmds()
|
96 |
+
{
|
97 |
+
$plugins = self::orderPluginsByPluginDependencies($this->plugins, false);
|
98 |
+
|
99 |
+
$allPluginUmds = [];
|
100 |
+
foreach ($plugins as $plugin) {
|
101 |
+
$pluginDir = self::getRelativePluginDirectory($plugin);
|
102 |
+
$minifiedUmd = "$pluginDir/vue/dist/$plugin.umd.min.js";
|
103 |
+
if (!is_file(PIWIK_INCLUDE_PATH . '/' . $minifiedUmd)) {
|
104 |
+
continue;
|
105 |
+
}
|
106 |
+
|
107 |
+
$allPluginUmds[] = new Chunk($plugin, [$minifiedUmd]);
|
108 |
+
}
|
109 |
+
return $allPluginUmds;
|
110 |
+
}
|
111 |
+
|
112 |
+
private function dividePluginUmdsByChunkCount($allPluginUmds, $totalSize)
|
113 |
+
{
|
114 |
+
$chunkSizeLimit = floor($totalSize / $this->chunkCount);
|
115 |
+
|
116 |
+
$chunkFiles = [];
|
117 |
+
|
118 |
+
$currentChunkIndex = 0;
|
119 |
+
$currentChunkSize = 0;
|
120 |
+
foreach ($allPluginUmds as $pluginChunk) {
|
121 |
+
$path = PIWIK_INCLUDE_PATH . '/' . $pluginChunk->getFiles()[0];
|
122 |
+
if (!is_file($path)) {
|
123 |
+
continue;
|
124 |
+
}
|
125 |
+
|
126 |
+
$size = filesize($path);
|
127 |
+
$currentChunkSize += $size;
|
128 |
+
|
129 |
+
if ($currentChunkSize > $chunkSizeLimit
|
130 |
+
&& !empty($chunkFiles[$currentChunkIndex])
|
131 |
+
&& $currentChunkIndex < $this->chunkCount - 1
|
132 |
+
) {
|
133 |
+
++$currentChunkIndex;
|
134 |
+
$currentChunkSize = $size;
|
135 |
+
}
|
136 |
+
|
137 |
+
$chunkFiles[$currentChunkIndex][] = $pluginChunk->getFiles()[0];
|
138 |
+
}
|
139 |
+
|
140 |
+
return $chunkFiles;
|
141 |
+
}
|
142 |
+
|
143 |
+
protected function retrieveFileLocations()
|
144 |
+
{
|
145 |
+
if (empty($this->plugins)) {
|
146 |
+
return;
|
147 |
+
}
|
148 |
+
|
149 |
+
if ($this->requestedChunk !== null && $this->requestedChunk !== '') {
|
150 |
+
$chunkFiles = $this->getChunkFiles();
|
151 |
+
|
152 |
+
$foundChunk = null;
|
153 |
+
foreach ($chunkFiles as $chunk) {
|
154 |
+
if ($chunk->getChunkName() == $this->requestedChunk) {
|
155 |
+
$foundChunk = $chunk;
|
156 |
+
break;
|
157 |
+
}
|
158 |
+
}
|
159 |
+
|
160 |
+
if (!$foundChunk) {
|
161 |
+
throw new \Exception("Could not find chunk {$this->requestedChunk}");
|
162 |
+
}
|
163 |
+
|
164 |
+
foreach ($foundChunk->getFiles() as $file) {
|
165 |
+
$this->fileLocations[] = $file;
|
166 |
+
}
|
167 |
+
|
168 |
+
return;
|
169 |
+
}
|
170 |
+
|
171 |
+
// either loadFilesIndividually = true, or being called w/ disable_merged_assets=1
|
172 |
+
$this->addUmdFilesIfDetected($this->plugins);
|
173 |
+
}
|
174 |
+
|
175 |
+
private function addUmdFilesIfDetected($plugins)
|
176 |
+
{
|
177 |
+
$plugins = self::orderPluginsByPluginDependencies($plugins, false);
|
178 |
+
|
179 |
+
foreach ($plugins as $plugin) {
|
180 |
+
$fileLocation = self::getUmdFileToUseForPlugin($plugin);
|
181 |
+
if ($fileLocation) {
|
182 |
+
$this->fileLocations[] = $fileLocation;
|
183 |
+
}
|
184 |
+
}
|
185 |
+
}
|
186 |
+
|
187 |
+
public static function getUmdFileToUseForPlugin($plugin)
|
188 |
+
{
|
189 |
+
$pluginDir = self::getRelativePluginDirectory($plugin);
|
190 |
+
|
191 |
+
$devUmd = "$pluginDir/vue/dist/$plugin.development.umd.js";
|
192 |
+
$minifiedUmd = "$pluginDir/vue/dist/$plugin.umd.min.js";
|
193 |
+
$umdSrcFolder = "$pluginDir/vue/src";
|
194 |
+
|
195 |
+
// in case there are dist files but no src files, which can happen during development
|
196 |
+
if (is_dir(PIWIK_INCLUDE_PATH . '/' . $umdSrcFolder)) {
|
197 |
+
if (Development::isEnabled() && is_file(PIWIK_INCLUDE_PATH . '/' . $devUmd)) {
|
198 |
+
return $devUmd;
|
199 |
+
} else if (is_file(PIWIK_INCLUDE_PATH . '/' . $minifiedUmd)) {
|
200 |
+
return $minifiedUmd;
|
201 |
+
}
|
202 |
+
}
|
203 |
+
|
204 |
+
return null;
|
205 |
+
}
|
206 |
+
|
207 |
+
public static function orderPluginsByPluginDependencies($plugins, $keepUnresolved = true)
|
208 |
+
{
|
209 |
+
$result = [];
|
210 |
+
|
211 |
+
while (!empty($plugins)) {
|
212 |
+
self::visitPlugin(reset($plugins), $keepUnresolved, $plugins, $result);
|
213 |
+
}
|
214 |
+
|
215 |
+
return $result;
|
216 |
+
}
|
217 |
+
|
218 |
+
public static function getPluginDependencies($plugin)
|
219 |
+
{
|
220 |
+
$pluginDir = self::getPluginDirectory($plugin);
|
221 |
+
$umdMetadata = "$pluginDir/vue/dist/umd.metadata.json";
|
222 |
+
|
223 |
+
$cache = Cache::getTransientCache();
|
224 |
+
$cacheKey = 'PluginUmdAssetFetcher.pluginDependencies.' . $plugin;
|
225 |
+
|
226 |
+
$pluginDependencies = $cache->fetch($cacheKey);
|
227 |
+
if (!is_array($pluginDependencies)) {
|
228 |
+
$pluginDependencies = [];
|
229 |
+
if (is_file($umdMetadata)) {
|
230 |
+
$pluginDependencies = json_decode(file_get_contents($umdMetadata), true);
|
231 |
+
$pluginDependencies = $pluginDependencies['dependsOn'] ?? [];
|
232 |
+
}
|
233 |
+
$cache->save($cacheKey, $pluginDependencies);
|
234 |
+
}
|
235 |
+
return $cache->fetch($cacheKey);
|
236 |
+
}
|
237 |
+
|
238 |
+
private static function visitPlugin($plugin, $keepUnresolved, &$plugins, &$result)
|
239 |
+
{
|
240 |
+
// remove the plugin from the array of plugins to visit
|
241 |
+
$index = array_search($plugin, $plugins);
|
242 |
+
if ($index !== false) {
|
243 |
+
unset($plugins[$index]);
|
244 |
+
} else {
|
245 |
+
return; // already visited
|
246 |
+
}
|
247 |
+
|
248 |
+
// read the plugin dependencies, if any
|
249 |
+
$pluginDependencies = self::getPluginDependencies($plugin);
|
250 |
+
|
251 |
+
if (!empty($pluginDependencies)) {
|
252 |
+
// visit each plugin this one depends on first, so it is loaded first
|
253 |
+
foreach ($pluginDependencies as $pluginDependency) {
|
254 |
+
// check if dependency is not activated
|
255 |
+
if (!in_array($pluginDependency, $plugins)
|
256 |
+
&& !in_array($pluginDependency, $result)
|
257 |
+
&& !$keepUnresolved
|
258 |
+
) {
|
259 |
+
return;
|
260 |
+
}
|
261 |
+
|
262 |
+
self::visitPlugin($pluginDependency, $keepUnresolved, $plugins, $result);
|
263 |
+
}
|
264 |
+
}
|
265 |
+
|
266 |
+
// add the plugin to the load order after visiting its dependencies
|
267 |
+
$result[] = $plugin;
|
268 |
+
}
|
269 |
+
|
270 |
+
protected function getPriorityOrder()
|
271 |
+
{
|
272 |
+
// the JS files are already ordered properly so this result doesn't matter
|
273 |
+
return [];
|
274 |
+
}
|
275 |
+
|
276 |
+
private static function getRelativePluginDirectory($plugin)
|
277 |
+
{
|
278 |
+
$result = self::getPluginDirectory($plugin);
|
279 |
+
$result = str_replace(PIWIK_INCLUDE_PATH . '/', '', $result);
|
280 |
+
return $result;
|
281 |
+
}
|
282 |
+
|
283 |
+
private static function getPluginDirectory($plugin)
|
284 |
+
{
|
285 |
+
return Manager::getInstance()->getPluginDirectory($plugin);
|
286 |
+
}
|
287 |
+
|
288 |
+
public static function getDefaultLoadIndividually()
|
289 |
+
{
|
290 |
+
return (Config::getInstance()->General['assets_umd_load_individually'] ?? 0) == 1;
|
291 |
+
}
|
292 |
+
|
293 |
+
public static function getDefaultChunkCount()
|
294 |
+
{
|
295 |
+
return (int)(Config::getInstance()->General['assets_umd_chunk_count'] ?? 3);
|
296 |
+
}
|
297 |
+
}
|
app/core/AssetManager/UIAssetFetcher/StylesheetUIAssetFetcher.php
CHANGED
@@ -9,7 +9,6 @@
|
|
9 |
namespace Piwik\AssetManager\UIAssetFetcher;
|
10 |
|
11 |
use Piwik\AssetManager\UIAssetFetcher;
|
12 |
-
use Piwik\Development;
|
13 |
use Piwik\Piwik;
|
14 |
|
15 |
class StylesheetUIAssetFetcher extends UIAssetFetcher
|
9 |
namespace Piwik\AssetManager\UIAssetFetcher;
|
10 |
|
11 |
use Piwik\AssetManager\UIAssetFetcher;
|
|
|
12 |
use Piwik\Piwik;
|
13 |
|
14 |
class StylesheetUIAssetFetcher extends UIAssetFetcher
|
app/core/Changes/Model.php
ADDED
@@ -0,0 +1,218 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Matomo - free/libre analytics platform
|
4 |
+
*
|
5 |
+
* @link https://matomo.org
|
6 |
+
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
7 |
+
*
|
8 |
+
*/
|
9 |
+
namespace Piwik\Changes;
|
10 |
+
|
11 |
+
use Piwik\Piwik;
|
12 |
+
use Piwik\Common;
|
13 |
+
use Piwik\Date;
|
14 |
+
use Piwik\Db;
|
15 |
+
use Piwik\Tracker\Db\DbException;
|
16 |
+
use Piwik\Updater\Migration;
|
17 |
+
use Piwik\Container\StaticContainer;
|
18 |
+
use Piwik\Plugin\Manager as PluginManager;
|
19 |
+
|
20 |
+
/**
|
21 |
+
* Change model class
|
22 |
+
*
|
23 |
+
* Handle all data access operations for changes
|
24 |
+
*
|
25 |
+
*/
|
26 |
+
class Model
|
27 |
+
{
|
28 |
+
|
29 |
+
const NO_CHANGES_EXIST = 0;
|
30 |
+
const CHANGES_EXIST = 1;
|
31 |
+
const NEW_CHANGES_EXIST = 2;
|
32 |
+
|
33 |
+
private $pluginManager;
|
34 |
+
|
35 |
+
/**
|
36 |
+
* @var Db\AdapterInterface
|
37 |
+
*/
|
38 |
+
private $db;
|
39 |
+
|
40 |
+
/**
|
41 |
+
* @param Db\AdapterInterface|null $db
|
42 |
+
* @param PluginManager|null $pluginManager
|
43 |
+
*/
|
44 |
+
public function __construct(?Db\AdapterInterface $db = null, ?PluginManager $pluginManager = null)
|
45 |
+
{
|
46 |
+
$this->db = ($db ?? Db::get());
|
47 |
+
$this->pluginManager = ($pluginManager ?? PluginManager::getInstance());
|
48 |
+
}
|
49 |
+
|
50 |
+
/**
|
51 |
+
* Add any new changes for a plugin to the changes table
|
52 |
+
*
|
53 |
+
* @param string $pluginName
|
54 |
+
*
|
55 |
+
* @throws \Exception
|
56 |
+
*/
|
57 |
+
public function addChanges(string $pluginName): void
|
58 |
+
{
|
59 |
+
if ($this->pluginManager->isValidPluginName($pluginName) && $this->pluginManager->isPluginInFilesystem($pluginName)) {
|
60 |
+
|
61 |
+
$plugin = $this->pluginManager->loadPlugin($pluginName);
|
62 |
+
if (!$plugin) {
|
63 |
+
return;
|
64 |
+
}
|
65 |
+
|
66 |
+
$changes = $plugin->getChanges();
|
67 |
+
foreach ($changes as $change) {
|
68 |
+
$this->addChange($pluginName, $change);
|
69 |
+
}
|
70 |
+
}
|
71 |
+
}
|
72 |
+
|
73 |
+
/**
|
74 |
+
* Remove all changes for a plugin
|
75 |
+
*
|
76 |
+
* @param string $pluginName
|
77 |
+
*/
|
78 |
+
public function removeChanges(string $pluginName): void
|
79 |
+
{
|
80 |
+
$table = Common::prefixTable('changes');
|
81 |
+
|
82 |
+
try {
|
83 |
+
$this->db->query("DELETE FROM " . $table . " WHERE plugin_name = ?", [$pluginName]);
|
84 |
+
} catch (\Exception $e) {
|
85 |
+
if (Db::get()->isErrNo($e, Migration\Db::ERROR_CODE_TABLE_NOT_EXISTS)) {
|
86 |
+
return;
|
87 |
+
}
|
88 |
+
throw $e;
|
89 |
+
}
|
90 |
+
}
|
91 |
+
|
92 |
+
/**
|
93 |
+
* Add a change item to the database table
|
94 |
+
*
|
95 |
+
* @param string $pluginName
|
96 |
+
* @param array $change
|
97 |
+
*/
|
98 |
+
public function addChange(string $pluginName, array $change): void
|
99 |
+
{
|
100 |
+
if(!isset($change['version']) || !isset($change['title']) || !isset($change['description'])) {
|
101 |
+
StaticContainer::get('Psr\Log\LoggerInterface')->warning(
|
102 |
+
"Change item for plugin {plugin} missing version, title or description fields - ignored",
|
103 |
+
['plugin' => $pluginName]);
|
104 |
+
return;
|
105 |
+
}
|
106 |
+
|
107 |
+
$table = Common::prefixTable('changes');
|
108 |
+
|
109 |
+
$fields = ['created_time', 'plugin_name', 'version', 'title', 'description'];
|
110 |
+
$params = [Date::now()->getDatetime(), $pluginName, $change['version'], $change['title'], $change['description']];
|
111 |
+
|
112 |
+
if (isset($change['link_name']) && isset($change['link'])) {
|
113 |
+
$fields[] = 'link_name';
|
114 |
+
$fields[] = 'link';
|
115 |
+
$params[] = $change['link_name'];
|
116 |
+
$params[] = $change['link'];
|
117 |
+
}
|
118 |
+
|
119 |
+
$insertSql = 'INSERT IGNORE INTO ' . $table . ' ('.implode(',', $fields).')
|
120 |
+
VALUES ('.Common::getSqlStringFieldsArray($params).')';
|
121 |
+
|
122 |
+
try {
|
123 |
+
$this->db->query($insertSql, $params);
|
124 |
+
} catch (\Exception $e) {
|
125 |
+
if (Db::get()->isErrNo($e, Migration\Db::ERROR_CODE_TABLE_NOT_EXISTS)) {
|
126 |
+
return;
|
127 |
+
}
|
128 |
+
throw $e;
|
129 |
+
}
|
130 |
+
}
|
131 |
+
|
132 |
+
/**
|
133 |
+
* Check if any changes items exist
|
134 |
+
*
|
135 |
+
* @param int|null $newerThanId Only count new changes as having a key > than this sequential key
|
136 |
+
*
|
137 |
+
* @return int
|
138 |
+
*/
|
139 |
+
public function doChangesExist(?int $newerThanId = null): int
|
140 |
+
{
|
141 |
+
$changes = $this->getChangeItems();
|
142 |
+
|
143 |
+
$all = 0;
|
144 |
+
$new = 0;
|
145 |
+
foreach ($changes as $c) {
|
146 |
+
$all++;
|
147 |
+
if ($newerThanId !== null && isset($c['idchange']) && $c['idchange'] > $newerThanId) {
|
148 |
+
$new++;
|
149 |
+
}
|
150 |
+
}
|
151 |
+
|
152 |
+
if ($all === 0) {
|
153 |
+
return self::NO_CHANGES_EXIST;
|
154 |
+
} else if ($all > 0 && $new === 0) {
|
155 |
+
return self::CHANGES_EXIST;
|
156 |
+
} else {
|
157 |
+
return self::NEW_CHANGES_EXIST;
|
158 |
+
}
|
159 |
+
}
|
160 |
+
|
161 |
+
/**
|
162 |
+
* Return an array of change items from the changes table
|
163 |
+
*
|
164 |
+
* @return array
|
165 |
+
* @throws DbException
|
166 |
+
*/
|
167 |
+
public function getChangeItems(): array
|
168 |
+
{
|
169 |
+
$showAtLeast = 10; // Always show at least this number of changes
|
170 |
+
$expireOlderThanDays = 90; // Don't show changes that were added to the table more than x days ago
|
171 |
+
|
172 |
+
$table = Common::prefixTable('changes');
|
173 |
+
$selectSql = "SELECT * FROM " . $table . " WHERE title IS NOT NULL ORDER BY idchange DESC";
|
174 |
+
|
175 |
+
try {
|
176 |
+
$changes = $this->db->fetchAll($selectSql);
|
177 |
+
} catch (\Exception $e) {
|
178 |
+
if (Db::get()->isErrNo($e, Migration\Db::ERROR_CODE_TABLE_NOT_EXISTS)) {
|
179 |
+
return [];
|
180 |
+
}
|
181 |
+
throw $e;
|
182 |
+
}
|
183 |
+
|
184 |
+
// Remove expired changes, only if there are at more than the minimum changes
|
185 |
+
$cutOffDate = Date::now()->subDay($expireOlderThanDays);
|
186 |
+
foreach ($changes as $k => $change) {
|
187 |
+
if (isset($change['idchange'])) {
|
188 |
+
$changes[$k]['idchange'] = (int)$change['idchange'];
|
189 |
+
}
|
190 |
+
if (count($changes) > $showAtLeast && $change['created_time'] < $cutOffDate) {
|
191 |
+
unset($changes[$k]);
|
192 |
+
}
|
193 |
+
}
|
194 |
+
|
195 |
+
/**
|
196 |
+
* Event triggered before changes are displayed
|
197 |
+
*
|
198 |
+
* Can be used to filter out unwanted changes
|
199 |
+
*
|
200 |
+
* **Example**
|
201 |
+
*
|
202 |
+
* Piwik::addAction('Changes.filterChanges', function ($changes) {
|
203 |
+
* foreach ($changes as $k => $c) {
|
204 |
+
* // Hide changes for the CoreHome plugin
|
205 |
+
* if (isset($c['plugin_name']) && $c['plugin_name'] == 'CoreHome') {
|
206 |
+
* unset($changes[$k]);
|
207 |
+
* }
|
208 |
+
* }
|
209 |
+
* });
|
210 |
+
*
|
211 |
+
* @param array &$changes
|
212 |
+
*/
|
213 |
+
Piwik::postEvent('Changes.filterChanges', array(&$changes));
|
214 |
+
|
215 |
+
return $changes;
|
216 |
+
}
|
217 |
+
|
218 |
+
}
|
app/core/Changes/UserChanges.php
ADDED
@@ -0,0 +1,77 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Matomo - free/libre analytics platform
|
4 |
+
*
|
5 |
+
* @link https://matomo.org
|
6 |
+
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
7 |
+
*
|
8 |
+
*/
|
9 |
+
namespace Piwik\Changes;
|
10 |
+
|
11 |
+
use Piwik\Db;
|
12 |
+
use Piwik\Changes\Model as ChangesModel;
|
13 |
+
use Piwik\Plugins\UsersManager\Model as UsersModel;
|
14 |
+
|
15 |
+
/**
|
16 |
+
* CoreHome user changes class
|
17 |
+
*/
|
18 |
+
class UserChanges
|
19 |
+
{
|
20 |
+
|
21 |
+
/**
|
22 |
+
* @var Db\AdapterInterface
|
23 |
+
*/
|
24 |
+
private $db;
|
25 |
+
private $user;
|
26 |
+
|
27 |
+
/**
|
28 |
+
* @param array $user
|
29 |
+
* @param Db\AdapterInterface|null $db
|
30 |
+
*/
|
31 |
+
public function __construct(array $user, ?Db\AdapterInterface $db = null)
|
32 |
+
{
|
33 |
+
$this->db = ($db ?? Db::get());
|
34 |
+
$this->user = $user;
|
35 |
+
}
|
36 |
+
|
37 |
+
/**
|
38 |
+
* Return a value indicating if there are any changes available to show the user
|
39 |
+
*
|
40 |
+
* @return int Changes\Model::NO_CHANGES_EXIST, Changes\Model::CHANGES_EXIST or Changes\Model::NEW_CHANGES_EXIST
|
41 |
+
* @throws \Exception
|
42 |
+
*/
|
43 |
+
public function getNewChangesStatus(): int
|
44 |
+
{
|
45 |
+
$idchangeLastViewed = (isset($this->user['idchange_last_viewed']) ? $this->user['idchange_last_viewed'] : null);
|
46 |
+
|
47 |
+
$changesModel = new ChangesModel($this->db);
|
48 |
+
return $changesModel->doChangesExist($idchangeLastViewed);
|
49 |
+
}
|
50 |
+
|
51 |
+
/**
|
52 |
+
* Return an array of changes and update the user's changes last viewed value
|
53 |
+
*
|
54 |
+
* @return array
|
55 |
+
*/
|
56 |
+
public function getChanges(): array
|
57 |
+
{
|
58 |
+
$changesModel = new ChangesModel(Db::get());
|
59 |
+
$changes = $changesModel->getChangeItems();
|
60 |
+
|
61 |
+
// Record the time that changes were viewed for the current user
|
62 |
+
$maxId = null;
|
63 |
+
foreach ($changes as $k => $change) {
|
64 |
+
if ($maxId < $change['idchange']) {
|
65 |
+
$maxId = $change['idchange'];
|
66 |
+
}
|
67 |
+
}
|
68 |
+
|
69 |
+
if ($maxId) {
|
70 |
+
$usersModel = new UsersModel();
|
71 |
+
$usersModel->updateUserFields($this->user['login'], ['idchange_last_viewed' => $maxId]);
|
72 |
+
}
|
73 |
+
|
74 |
+
return $changes;
|
75 |
+
}
|
76 |
+
|
77 |
+
}
|
app/core/CliMulti/Output.php
CHANGED
@@ -8,7 +8,6 @@
|
|
8 |
namespace Piwik\CliMulti;
|
9 |
|
10 |
use Piwik\CliMulti;
|
11 |
-
use Piwik\Common;
|
12 |
use Piwik\Filesystem;
|
13 |
|
14 |
class Output implements OutputInterface
|
8 |
namespace Piwik\CliMulti;
|
9 |
|
10 |
use Piwik\CliMulti;
|
|
|
11 |
use Piwik\Filesystem;
|
12 |
|
13 |
class Output implements OutputInterface
|
app/core/CliMulti/OutputInterface.php
CHANGED
@@ -7,9 +7,6 @@
|
|
7 |
*/
|
8 |
namespace Piwik\CliMulti;
|
9 |
|
10 |
-
use Piwik\CliMulti;
|
11 |
-
use Piwik\Common;
|
12 |
-
use Piwik\Filesystem;
|
13 |
|
14 |
interface OutputInterface
|
15 |
{
|
7 |
*/
|
8 |
namespace Piwik\CliMulti;
|
9 |
|
|
|
|
|
|
|
10 |
|
11 |
interface OutputInterface
|
12 |
{
|
app/core/CliMulti/Process.php
CHANGED
@@ -215,6 +215,7 @@ class Process
|
|
215 |
|
216 |
if (SettingsServer::isWindows()) {
|
217 |
$reasons[] = 'not supported on windows';
|
|
|
218 |
}
|
219 |
|
220 |
if (self::isMethodDisabled('shell_exec')) {
|
@@ -287,6 +288,11 @@ class Process
|
|
287 |
{
|
288 |
$exec = $command . ' > /dev/null 2>&1; echo $?';
|
289 |
$returnCode = @shell_exec($exec);
|
|
|
|
|
|
|
|
|
|
|
290 |
$returnCode = trim($returnCode);
|
291 |
return 0 == (int) $returnCode;
|
292 |
}
|
215 |
|
216 |
if (SettingsServer::isWindows()) {
|
217 |
$reasons[] = 'not supported on windows';
|
218 |
+
return $reasons;
|
219 |
}
|
220 |
|
221 |
if (self::isMethodDisabled('shell_exec')) {
|
288 |
{
|
289 |
$exec = $command . ' > /dev/null 2>&1; echo $?';
|
290 |
$returnCode = @shell_exec($exec);
|
291 |
+
|
292 |
+
if (false === $returnCode || null === $returnCode) {
|
293 |
+
return false;
|
294 |
+
}
|
295 |
+
|
296 |
$returnCode = trim($returnCode);
|
297 |
return 0 == (int) $returnCode;
|
298 |
}
|
app/core/CliMulti/StaticOutput.php
CHANGED
@@ -7,9 +7,7 @@
|
|
7 |
*/
|
8 |
namespace Piwik\CliMulti;
|
9 |
|
10 |
-
use Piwik\CliMulti;
|
11 |
use Piwik\Common;
|
12 |
-
use Piwik\Filesystem;
|
13 |
|
14 |
class StaticOutput implements OutputInterface
|
15 |
{
|
7 |
*/
|
8 |
namespace Piwik\CliMulti;
|
9 |
|
|
|
10 |
use Piwik\Common;
|
|
|
11 |
|
12 |
class StaticOutput implements OutputInterface
|
13 |
{
|
app/core/Columns/Dimension.php
CHANGED
@@ -12,7 +12,6 @@ use Piwik\Db;
|
|
12 |
use Piwik\Piwik;
|
13 |
use Piwik\Plugin;
|
14 |
use Piwik\Plugin\ArchivedMetric;
|
15 |
-
use Piwik\Plugin\ComponentFactory;
|
16 |
use Piwik\Plugin\Segment;
|
17 |
use Exception;
|
18 |
use Piwik\CacheId;
|
@@ -456,10 +455,7 @@ abstract class Dimension
|
|
456 |
case Dimension::TYPE_DURATION_S:
|
457 |
return $formatter->getPrettyTimeFromSeconds($value, $displayAsSentence = false);
|
458 |
case Dimension::TYPE_DURATION_MS:
|
459 |
-
$val =
|
460 |
-
if ($val > 60) {
|
461 |
-
$val = round($val);
|
462 |
-
}
|
463 |
return $formatter->getPrettyTimeFromSeconds($val, $displayAsSentence = true);
|
464 |
case Dimension::TYPE_PERCENT:
|
465 |
return $formatter->getPrettyPercentFromQuotient($value);
|
12 |
use Piwik\Piwik;
|
13 |
use Piwik\Plugin;
|
14 |
use Piwik\Plugin\ArchivedMetric;
|
|
|
15 |
use Piwik\Plugin\Segment;
|
16 |
use Exception;
|
17 |
use Piwik\CacheId;
|
455 |
case Dimension::TYPE_DURATION_S:
|
456 |
return $formatter->getPrettyTimeFromSeconds($value, $displayAsSentence = false);
|
457 |
case Dimension::TYPE_DURATION_MS:
|
458 |
+
$val = round(($value / 1000), ($value / 1000) > 60 ? 0 : 2);
|
|
|
|
|
|
|
459 |
return $formatter->getPrettyTimeFromSeconds($val, $displayAsSentence = true);
|
460 |
case Dimension::TYPE_PERCENT:
|
461 |
return $formatter->getPrettyPercentFromQuotient($value);
|
app/core/Columns/Discriminator.php
CHANGED
@@ -9,7 +9,6 @@
|
|
9 |
namespace Piwik\Columns;
|
10 |
|
11 |
use Exception;
|
12 |
-
use Piwik\Plugins\Actions\Actions\ActionSiteSearch;
|
13 |
|
14 |
/**
|
15 |
* @api
|
9 |
namespace Piwik\Columns;
|
10 |
|
11 |
use Exception;
|
|
|
12 |
|
13 |
/**
|
14 |
* @api
|
app/core/Common.php
CHANGED
@@ -13,7 +13,6 @@ use Piwik\CliMulti\Process;
|
|
13 |
use Piwik\Container\StaticContainer;
|
14 |
use Piwik\Intl\Data\Provider\LanguageDataProvider;
|
15 |
use Piwik\Intl\Data\Provider\RegionDataProvider;
|
16 |
-
use Piwik\Plugins\UserCountry\LocationProvider\DefaultProvider;
|
17 |
use Piwik\Tracker\Cache as TrackerCache;
|
18 |
|
19 |
/**
|
@@ -577,6 +576,38 @@ class Common
|
|
577 |
return $value;
|
578 |
}
|
579 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
580 |
/*
|
581 |
* Generating unique strings
|
582 |
*/
|
@@ -1139,7 +1170,7 @@ class Common
|
|
1139 |
{
|
1140 |
$cache = TrackerCache::getCacheGeneral();
|
1141 |
return empty($cache['currentLocationProviderId'])
|
1142 |
-
?
|
1143 |
: $cache['currentLocationProviderId'];
|
1144 |
}
|
1145 |
|
13 |
use Piwik\Container\StaticContainer;
|
14 |
use Piwik\Intl\Data\Provider\LanguageDataProvider;
|
15 |
use Piwik\Intl\Data\Provider\RegionDataProvider;
|
|
|
16 |
use Piwik\Tracker\Cache as TrackerCache;
|
17 |
|
18 |
/**
|
576 |
return $value;
|
577 |
}
|
578 |
|
579 |
+
/**
|
580 |
+
* Replaces lbrace with an encoded entity to prevent angular from parsing the content
|
581 |
+
*
|
582 |
+
* @deprecated Will be removed, once the vue js migration is done
|
583 |
+
*
|
584 |
+
* @param $string
|
585 |
+
* @return array|string|string[]|null
|
586 |
+
*/
|
587 |
+
public static function fixLbrace($string)
|
588 |
+
{
|
589 |
+
$chars = array('{', '{', '{', '{', '{', '{');
|
590 |
+
|
591 |
+
static $search;
|
592 |
+
static $replace;
|
593 |
+
|
594 |
+
if (!isset($search)) {
|
595 |
+
$search = array_map(function ($val) { return $val . $val; }, $chars);
|
596 |
+
}
|
597 |
+
if (!isset($replace)) {
|
598 |
+
$replace = array_map(function ($val) { return $val . '⁣' . $val; }, $chars);
|
599 |
+
}
|
600 |
+
|
601 |
+
$replacedString = is_null($string) ? $string : str_replace($search, $replace, $string);
|
602 |
+
|
603 |
+
// try to replace characters until there are no changes
|
604 |
+
if ($string !== $replacedString) {
|
605 |
+
return self::fixLbrace($replacedString);
|
606 |
+
}
|
607 |
+
|
608 |
+
return $string;
|
609 |
+
}
|
610 |
+
|
611 |
/*
|
612 |
* Generating unique strings
|
613 |
*/
|
1170 |
{
|
1171 |
$cache = TrackerCache::getCacheGeneral();
|
1172 |
return empty($cache['currentLocationProviderId'])
|
1173 |
+
? Plugins\UserCountry\LocationProvider::getDefaultProviderId()
|
1174 |
: $cache['currentLocationProviderId'];
|
1175 |
}
|
1176 |
|
app/core/Config/Cache.php
CHANGED
@@ -1,4 +1,5 @@
|
|
1 |
<?php
|
|
|
2 |
/**
|
3 |
* Matomo - free/libre analytics platform
|
4 |
*
|
@@ -36,9 +37,14 @@ class Cache extends File
|
|
36 |
return PIWIK_INCLUDE_PATH . '/tmp/' . $host . '/cache/tracker';
|
37 |
}
|
38 |
|
|
|
|
|
|
|
|
|
|
|
39 |
public function isValidHost($mergedConfigSettings)
|
40 |
{
|
41 |
-
if (!
|
42 |
return false;
|
43 |
}
|
44 |
// note: we do not support "enable_trusted_host_check" to keep things secure
|
@@ -51,10 +57,12 @@ class Cache extends File
|
|
51 |
$host = Url::getHostSanitized($host); // Remove any port number to get actual hostname
|
52 |
$host = Common::sanitizeInputValue($host);
|
53 |
|
54 |
-
if (
|
|
|
55 |
|| strpos($host, '..') !== false
|
56 |
|| strpos($host, '\\') !== false
|
57 |
-
|| strpos($host, '/') !== false
|
|
|
58 |
throw new \Exception('Unsupported host');
|
59 |
}
|
60 |
|
@@ -70,19 +78,17 @@ class Cache extends File
|
|
70 |
$hosts = Url::getTrustedHosts();
|
71 |
$initialDir = $this->directory;
|
72 |
|
73 |
-
foreach ($hosts as $host)
|
74 |
-
{
|
75 |
$dir = $this->makeCacheDir($host);
|
76 |
if (@is_dir($dir)) {
|
77 |
$this->directory = $dir;
|
78 |
$success = parent::doDelete($id);
|
79 |
if ($success) {
|
80 |
-
Piwik::postEvent('Core.configFileDeleted',
|
81 |
}
|
82 |
}
|
83 |
}
|
84 |
|
85 |
$this->directory = $initialDir;
|
86 |
}
|
87 |
-
|
88 |
}
|
1 |
<?php
|
2 |
+
|
3 |
/**
|
4 |
* Matomo - free/libre analytics platform
|
5 |
*
|
37 |
return PIWIK_INCLUDE_PATH . '/tmp/' . $host . '/cache/tracker';
|
38 |
}
|
39 |
|
40 |
+
public static function hasHostConfig($mergedConfigSettings)
|
41 |
+
{
|
42 |
+
return isset($mergedConfigSettings['General']['trusted_hosts']) && is_array($mergedConfigSettings['General']['trusted_hosts']);
|
43 |
+
}
|
44 |
+
|
45 |
public function isValidHost($mergedConfigSettings)
|
46 |
{
|
47 |
+
if (!self::hasHostConfig($mergedConfigSettings)) {
|
48 |
return false;
|
49 |
}
|
50 |
// note: we do not support "enable_trusted_host_check" to keep things secure
|
57 |
$host = Url::getHostSanitized($host); // Remove any port number to get actual hostname
|
58 |
$host = Common::sanitizeInputValue($host);
|
59 |
|
60 |
+
if (
|
61 |
+
empty($host)
|
62 |
|| strpos($host, '..') !== false
|
63 |
|| strpos($host, '\\') !== false
|
64 |
+
|| strpos($host, '/') !== false
|
65 |
+
) {
|
66 |
throw new \Exception('Unsupported host');
|
67 |
}
|
68 |
|
78 |
$hosts = Url::getTrustedHosts();
|
79 |
$initialDir = $this->directory;
|
80 |
|
81 |
+
foreach ($hosts as $host) {
|
|
|
82 |
$dir = $this->makeCacheDir($host);
|
83 |
if (@is_dir($dir)) {
|
84 |
$this->directory = $dir;
|
85 |
$success = parent::doDelete($id);
|
86 |
if ($success) {
|
87 |
+
Piwik::postEvent('Core.configFileDeleted', [$this->getFilename($id)]);
|
88 |
}
|
89 |
}
|
90 |
}
|
91 |
|
92 |
$this->directory = $initialDir;
|
93 |
}
|
|
|
94 |
}
|
app/core/Config/GeneralConfig.php
ADDED
@@ -0,0 +1,48 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Matomo - free/libre analytics platform
|
4 |
+
*
|
5 |
+
* @link https://matomo.org
|
6 |
+
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
7 |
+
*
|
8 |
+
*/
|
9 |
+
namespace Piwik\Config;
|
10 |
+
|
11 |
+
use Piwik\Config;
|
12 |
+
|
13 |
+
class GeneralConfig
|
14 |
+
{
|
15 |
+
/**
|
16 |
+
* Update Archive config
|
17 |
+
*
|
18 |
+
* @param string $name Setting name
|
19 |
+
* @param mixed $value Value
|
20 |
+
*/
|
21 |
+
public static function setConfigValue($name, $value)
|
22 |
+
{
|
23 |
+
$section = self::getConfig();
|
24 |
+
$section[$name] = $value;
|
25 |
+
Config::getInstance()->General = $section;
|
26 |
+
}
|
27 |
+
|
28 |
+
public static function getConfigValue($name, $idSite = null)
|
29 |
+
{
|
30 |
+
$config = self::getConfig();
|
31 |
+
if (!empty($idSite)) {
|
32 |
+
$siteSpecificConfig = self::getSiteSpecificConfig($idSite);
|
33 |
+
$config = array_merge($config, $siteSpecificConfig);
|
34 |
+
}
|
35 |
+
return $config[$name] ?? null;
|
36 |
+
}
|
37 |
+
|
38 |
+
private static function getConfig()
|
39 |
+
{
|
40 |
+
return Config::getInstance()->General;
|
41 |
+
}
|
42 |
+
|
43 |
+
private static function getSiteSpecificConfig($idSite)
|
44 |
+
{
|
45 |
+
$key = 'General_' . $idSite;
|
46 |
+
return Config::getInstance()->$key;
|
47 |
+
}
|
48 |
+
}
|
app/core/Config/IniFileChain.php
CHANGED
@@ -1,10 +1,12 @@
|
|
1 |
<?php
|
|
|
2 |
/**
|
3 |
* Matomo - free/libre analytics platform
|
4 |
*
|
5 |
* @link https://matomo.org
|
6 |
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
7 |
*/
|
|
|
8 |
namespace Piwik\Config;
|
9 |
|
10 |
use Piwik\Common;
|
@@ -42,14 +44,14 @@ class IniFileChain
|
|
42 |
*
|
43 |
* @var array
|
44 |
*/
|
45 |
-
protected $settingsChain =
|
46 |
|
47 |
/**
|
48 |
* The merged INI settings.
|
49 |
*
|
50 |
* @var array
|
51 |
*/
|
52 |
-
protected $mergedSettings =
|
53 |
|
54 |
/**
|
55 |
* Constructor.
|
@@ -57,7 +59,7 @@ class IniFileChain
|
|
57 |
* @param string[] $defaultSettingsFiles The list of paths to INI files w/ the default setting values.
|
58 |
* @param string|null $userSettingsFile The path to the user settings file.
|
59 |
*/
|
60 |
-
public function __construct(array $defaultSettingsFiles =
|
61 |
{
|
62 |
$this->reload($defaultSettingsFiles, $userSettingsFile);
|
63 |
}
|
@@ -71,7 +73,7 @@ class IniFileChain
|
|
71 |
public function &get($name)
|
72 |
{
|
73 |
if (!isset($this->mergedSettings[$name])) {
|
74 |
-
$this->mergedSettings[$name] =
|
75 |
}
|
76 |
|
77 |
$result =& $this->mergedSettings[$name];
|
@@ -146,12 +148,12 @@ class IniFileChain
|
|
146 |
|
147 |
$dirty = false;
|
148 |
|
149 |
-
$configToWrite =
|
150 |
foreach ($this->mergedSettings as $sectionName => $changedSection) {
|
151 |
-
if(isset($existingMutableSettings[$sectionName])){
|
152 |
$existingMutableSection = $existingMutableSettings[$sectionName];
|
153 |
-
} else{
|
154 |
-
$existingMutableSection =
|
155 |
}
|
156 |
|
157 |
// remove default values from both (they should not get written to local)
|
@@ -162,7 +164,8 @@ class IniFileChain
|
|
162 |
|
163 |
// if either local/config have non-default values and the other doesn't,
|
164 |
// OR both have values, but different values, we must write to config.ini.php
|
165 |
-
if (
|
|
|
166 |
|| (!empty($changedSection)
|
167 |
&& !empty($existingMutableSection)
|
168 |
&& self::compareElements($changedSection, $existingMutableSection))
|
@@ -207,9 +210,10 @@ class IniFileChain
|
|
207 |
/**
|
208 |
* Reloads settings from disk.
|
209 |
*/
|
210 |
-
public function reload($defaultSettingsFiles =
|
211 |
{
|
212 |
-
if (
|
|
|
213 |
|| !empty($userSettingsFile)
|
214 |
) {
|
215 |
$this->resetSettingsChain($defaultSettingsFiles, $userSettingsFile);
|
@@ -218,13 +222,15 @@ class IniFileChain
|
|
218 |
$hasAbsoluteConfigFile = !empty($userSettingsFile) && strpos($userSettingsFile, DIRECTORY_SEPARATOR) === 0;
|
219 |
$useConfigCache = !empty($GLOBALS['ENABLE_CONFIG_PHP_CACHE']) && $hasAbsoluteConfigFile;
|
220 |
|
221 |
-
if ($useConfigCache) {
|
222 |
$cache = new Cache();
|
223 |
$values = $cache->doFetch(self::CONFIG_CACHE_KEY);
|
224 |
-
|
225 |
-
if (
|
|
|
226 |
&& isset($values['mergedSettings'])
|
227 |
-
&& isset($values['settingsChain'][$userSettingsFile])
|
|
|
228 |
$this->mergedSettings = $values['mergedSettings'];
|
229 |
$this->settingsChain = $values['settingsChain'];
|
230 |
return;
|
@@ -253,16 +259,18 @@ class IniFileChain
|
|
253 |
if (!empty($GLOBALS['MATOMO_MODIFY_CONFIG_SETTINGS']) && !empty($this->mergedSettings)) {
|
254 |
$this->mergedSettings = call_user_func($GLOBALS['MATOMO_MODIFY_CONFIG_SETTINGS'], $this->mergedSettings);
|
255 |
}
|
256 |
-
|
257 |
-
if ($useConfigCache
|
258 |
-
&& !empty($this->mergedSettings)
|
259 |
-
&& !empty($this->settingsChain)) {
|
260 |
|
|
|
|
|
|
|
|
|
|
|
|
|
261 |
$ttlOneHour = 3600;
|
262 |
$cache = new Cache();
|
263 |
if ($cache->isValidHost($this->mergedSettings)) {
|
264 |
// we make sure to save the config only if the host is valid...
|
265 |
-
$data =
|
266 |
$cache->doSave(self::CONFIG_CACHE_KEY, $data, $ttlOneHour);
|
267 |
}
|
268 |
}
|
@@ -278,7 +286,7 @@ class IniFileChain
|
|
278 |
|
279 |
private function copy($merged)
|
280 |
{
|
281 |
-
$copy =
|
282 |
foreach ($merged as $index => $value) {
|
283 |
if (is_array($value)) {
|
284 |
$copy[$index] = $this->copy($value);
|
@@ -291,7 +299,7 @@ class IniFileChain
|
|
291 |
|
292 |
private function resetSettingsChain($defaultSettingsFiles, $userSettingsFile)
|
293 |
{
|
294 |
-
$this->settingsChain =
|
295 |
|
296 |
if (!empty($defaultSettingsFiles)) {
|
297 |
foreach ($defaultSettingsFiles as $file) {
|
@@ -308,7 +316,7 @@ class IniFileChain
|
|
308 |
{
|
309 |
$mergedSettings = $this->getMergedDefaultSettings();
|
310 |
|
311 |
-
$userSettings = end($this->settingsChain) ?:
|
312 |
foreach ($userSettings as $sectionName => $section) {
|
313 |
if (!isset($mergedSettings[$sectionName])) {
|
314 |
$mergedSettings[$sectionName] = $section;
|
@@ -326,9 +334,10 @@ class IniFileChain
|
|
326 |
{
|
327 |
$userSettingsFile = $this->getUserSettingsFile();
|
328 |
|
329 |
-
$mergedSettings =
|
330 |
foreach ($this->settingsChain as $file => $settings) {
|
331 |
-
if (
|
|
|
332 |
|| empty($settings)
|
333 |
) {
|
334 |
continue;
|
@@ -396,14 +405,14 @@ class IniFileChain
|
|
396 |
// ignore keys that are in $original but not in $modified
|
397 |
|
398 |
if (empty($original) || !is_array($original)) {
|
399 |
-
$original =
|
400 |
}
|
401 |
|
402 |
if (empty($modified) || !is_array($modified)) {
|
403 |
-
$modified =
|
404 |
}
|
405 |
|
406 |
-
return array_udiff_assoc($modified, $original,
|
407 |
}
|
408 |
|
409 |
/**
|
@@ -537,7 +546,7 @@ class IniFileChain
|
|
537 |
*
|
538 |
* @param array &$values Config values that will be saved
|
539 |
*/
|
540 |
-
Piwik::postEvent('Config.beforeSave',
|
541 |
$values = $this->encodeValues($values);
|
542 |
|
543 |
$writer = new IniWriter();
|
1 |
<?php
|
2 |
+
|
3 |
/**
|
4 |
* Matomo - free/libre analytics platform
|
5 |
*
|
6 |
* @link https://matomo.org
|
7 |
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
8 |
*/
|
9 |
+
|
10 |
namespace Piwik\Config;
|
11 |
|
12 |
use Piwik\Common;
|
44 |
*
|
45 |
* @var array
|
46 |
*/
|
47 |
+
protected $settingsChain = [];
|
48 |
|
49 |
/**
|
50 |
* The merged INI settings.
|
51 |
*
|
52 |
* @var array
|
53 |
*/
|
54 |
+
protected $mergedSettings = [];
|
55 |
|
56 |
/**
|
57 |
* Constructor.
|
59 |
* @param string[] $defaultSettingsFiles The list of paths to INI files w/ the default setting values.
|
60 |
* @param string|null $userSettingsFile The path to the user settings file.
|
61 |
*/
|
62 |
+
public function __construct(array $defaultSettingsFiles = [], $userSettingsFile = null)
|
63 |
{
|
64 |
$this->reload($defaultSettingsFiles, $userSettingsFile);
|
65 |
}
|
73 |
public function &get($name)
|
74 |
{
|
75 |
if (!isset($this->mergedSettings[$name])) {
|
76 |
+
$this->mergedSettings[$name] = [];
|
77 |
}
|
78 |
|
79 |
$result =& $this->mergedSettings[$name];
|
148 |
|
149 |
$dirty = false;
|
150 |
|
151 |
+
$configToWrite = [];
|
152 |
foreach ($this->mergedSettings as $sectionName => $changedSection) {
|
153 |
+
if (isset($existingMutableSettings[$sectionName])) {
|
154 |
$existingMutableSection = $existingMutableSettings[$sectionName];
|
155 |
+
} else {
|
156 |
+
$existingMutableSection = [];
|
157 |
}
|
158 |
|
159 |
// remove default values from both (they should not get written to local)
|
164 |
|
165 |
// if either local/config have non-default values and the other doesn't,
|
166 |
// OR both have values, but different values, we must write to config.ini.php
|
167 |
+
if (
|
168 |
+
empty($changedSection) xor empty($existingMutableSection)
|
169 |
|| (!empty($changedSection)
|
170 |
&& !empty($existingMutableSection)
|
171 |
&& self::compareElements($changedSection, $existingMutableSection))
|
210 |
/**
|
211 |
* Reloads settings from disk.
|
212 |
*/
|
213 |
+
public function reload($defaultSettingsFiles = [], $userSettingsFile = null)
|
214 |
{
|
215 |
+
if (
|
216 |
+
!empty($defaultSettingsFiles)
|
217 |
|| !empty($userSettingsFile)
|
218 |
) {
|
219 |
$this->resetSettingsChain($defaultSettingsFiles, $userSettingsFile);
|
222 |
$hasAbsoluteConfigFile = !empty($userSettingsFile) && strpos($userSettingsFile, DIRECTORY_SEPARATOR) === 0;
|
223 |
$useConfigCache = !empty($GLOBALS['ENABLE_CONFIG_PHP_CACHE']) && $hasAbsoluteConfigFile;
|
224 |
|
225 |
+
if ($useConfigCache && is_file($userSettingsFile)) {
|
226 |
$cache = new Cache();
|
227 |
$values = $cache->doFetch(self::CONFIG_CACHE_KEY);
|
228 |
+
|
229 |
+
if (
|
230 |
+
!empty($values)
|
231 |
&& isset($values['mergedSettings'])
|
232 |
+
&& isset($values['settingsChain'][$userSettingsFile])
|
233 |
+
) {
|
234 |
$this->mergedSettings = $values['mergedSettings'];
|
235 |
$this->settingsChain = $values['settingsChain'];
|
236 |
return;
|
259 |
if (!empty($GLOBALS['MATOMO_MODIFY_CONFIG_SETTINGS']) && !empty($this->mergedSettings)) {
|
260 |
$this->mergedSettings = call_user_func($GLOBALS['MATOMO_MODIFY_CONFIG_SETTINGS'], $this->mergedSettings);
|
261 |
}
|
|
|
|
|
|
|
|
|
262 |
|
263 |
+
if (
|
264 |
+
$useConfigCache
|
265 |
+
&& !empty($this->mergedSettings)
|
266 |
+
&& !empty($this->settingsChain)
|
267 |
+
&& Cache::hasHostConfig($this->mergedSettings)
|
268 |
+
) {
|
269 |
$ttlOneHour = 3600;
|
270 |
$cache = new Cache();
|
271 |
if ($cache->isValidHost($this->mergedSettings)) {
|
272 |
// we make sure to save the config only if the host is valid...
|
273 |
+
$data = ['mergedSettings' => $this->mergedSettings, 'settingsChain' => $this->settingsChain];
|
274 |
$cache->doSave(self::CONFIG_CACHE_KEY, $data, $ttlOneHour);
|
275 |
}
|
276 |
}
|
286 |
|
287 |
private function copy($merged)
|
288 |
{
|
289 |
+
$copy = [];
|
290 |
foreach ($merged as $index => $value) {
|
291 |
if (is_array($value)) {
|
292 |
$copy[$index] = $this->copy($value);
|
299 |
|
300 |
private function resetSettingsChain($defaultSettingsFiles, $userSettingsFile)
|
301 |
{
|
302 |
+
$this->settingsChain = [];
|
303 |
|
304 |
if (!empty($defaultSettingsFiles)) {
|
305 |
foreach ($defaultSettingsFiles as $file) {
|
316 |
{
|
317 |
$mergedSettings = $this->getMergedDefaultSettings();
|
318 |
|
319 |
+
$userSettings = end($this->settingsChain) ?: [];
|
320 |
foreach ($userSettings as $sectionName => $section) {
|
321 |
if (!isset($mergedSettings[$sectionName])) {
|
322 |
$mergedSettings[$sectionName] = $section;
|
334 |
{
|
335 |
$userSettingsFile = $this->getUserSettingsFile();
|
336 |
|
337 |
+
$mergedSettings = [];
|
338 |
foreach ($this->settingsChain as $file => $settings) {
|
339 |
+
if (
|
340 |
+
$file == $userSettingsFile
|
341 |
|| empty($settings)
|
342 |
) {
|
343 |
continue;
|
405 |
// ignore keys that are in $original but not in $modified
|
406 |
|
407 |
if (empty($original) || !is_array($original)) {
|
408 |
+
$original = [];
|
409 |
}
|
410 |
|
411 |
if (empty($modified) || !is_array($modified)) {
|
412 |
+
$modified = [];
|
413 |
}
|
414 |
|
415 |
+
return array_udiff_assoc($modified, $original, [__CLASS__, 'compareElements']);
|
416 |
}
|
417 |
|
418 |
/**
|
546 |
*
|
547 |
* @param array &$values Config values that will be saved
|
548 |
*/
|
549 |
+
Piwik::postEvent('Config.beforeSave', [&$values]);
|
550 |
$values = $this->encodeValues($values);
|
551 |
|
552 |
$writer = new IniWriter();
|
app/core/Console.php
CHANGED
@@ -53,6 +53,11 @@ class Console extends Application
|
|
53 |
);
|
54 |
|
55 |
$this->getDefinition()->addOption($option);
|
|
|
|
|
|
|
|
|
|
|
56 |
}
|
57 |
|
58 |
public function renderException($e, $output)
|
@@ -132,7 +137,10 @@ class Console extends Application
|
|
132 |
}
|
133 |
|
134 |
$importantLogDetector = StaticContainer::get(FailureLogMessageDetector::class);
|
135 |
-
if (
|
|
|
|
|
|
|
136 |
$output->writeln("Error: error or warning logs detected, exit 1");
|
137 |
$exitCode = 1;
|
138 |
}
|
53 |
);
|
54 |
|
55 |
$this->getDefinition()->addOption($option);
|
56 |
+
|
57 |
+
$option = new InputOption('ignore-warn', null, InputOption::VALUE_NONE,
|
58 |
+
'Return 0 exit code even if there are warning logs or error logs detected in the command output.');
|
59 |
+
|
60 |
+
$this->getDefinition()->addOption($option);
|
61 |
}
|
62 |
|
63 |
public function renderException($e, $output)
|
137 |
}
|
138 |
|
139 |
$importantLogDetector = StaticContainer::get(FailureLogMessageDetector::class);
|
140 |
+
if (!$input->hasParameterOption('--ignore-warn')
|
141 |
+
&& $exitCode === 0
|
142 |
+
&& $importantLogDetector->hasEncounteredImportantLog()
|
143 |
+
) {
|
144 |
$output->writeln("Error: error or warning logs detected, exit 1");
|
145 |
$exitCode = 1;
|
146 |
}
|
app/core/Cookie.php
CHANGED
@@ -146,7 +146,10 @@ class Cookie
|
|
146 |
}
|
147 |
}
|
148 |
|
149 |
-
|
|
|
|
|
|
|
150 |
|
151 |
$header = 'Set-Cookie: ' . rawurlencode($Name) . '=' . rawurlencode($Value)
|
152 |
. (empty($Expires) ? '' : '; expires=' . $Expires)
|
146 |
}
|
147 |
}
|
148 |
|
149 |
+
// Format expire time only for non session cookies
|
150 |
+
if (0 !== $Expires) {
|
151 |
+
$Expires = $this->formatExpireTime($Expires);
|
152 |
+
}
|
153 |
|
154 |
$header = 'Set-Cookie: ' . rawurlencode($Name) . '=' . rawurlencode($Value)
|
155 |
. (empty($Expires) ? '' : '; expires=' . $Expires)
|
app/core/CronArchive.php
CHANGED
@@ -23,8 +23,6 @@ use Piwik\CronArchive\QueueConsumer;
|
|
23 |
use Piwik\CronArchive\SharedSiteIds;
|
24 |
use Piwik\CronArchive\StopArchiverException;
|
25 |
use Piwik\DataAccess\ArchiveSelector;
|
26 |
-
use Piwik\DataAccess\ArchiveTableCreator;
|
27 |
-
use Piwik\DataAccess\ArchiveWriter;
|
28 |
use Piwik\DataAccess\Model;
|
29 |
use Piwik\DataAccess\RawLogDao;
|
30 |
use Piwik\Exception\UnexpectedWebsiteFoundException;
|
@@ -162,6 +160,23 @@ class CronArchive
|
|
162 |
*/
|
163 |
public $maxConcurrentArchivers = false;
|
164 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
165 |
private $archivingStartingTime;
|
166 |
|
167 |
private $formatter;
|
@@ -360,6 +375,8 @@ class CronArchive
|
|
360 |
$queueConsumer = new QueueConsumer($this->logger, $this->websiteIdArchiveList, $countOfProcesses, $pid,
|
361 |
$this->model, $this->segmentArchiving, $this, $this->cliMultiRequestParser, $this->archiveFilter);
|
362 |
|
|
|
|
|
363 |
while (true) {
|
364 |
if ($this->isMaintenanceModeEnabled()) {
|
365 |
$this->logger->info("Archiving will stop now because maintenance mode is enabled");
|
@@ -389,6 +406,10 @@ class CronArchive
|
|
389 |
|
390 |
$successCount = $this->launchArchivingFor($archivesToProcess, $queueConsumer);
|
391 |
$numArchivesFinished += $successCount;
|
|
|
|
|
|
|
|
|
392 |
}
|
393 |
|
394 |
$this->disconnectDb();
|
@@ -474,7 +495,7 @@ class CronArchive
|
|
474 |
|
475 |
foreach ($urls as $index => $url) {
|
476 |
$content = array_key_exists($index, $responses) ? $responses[$index] : null;
|
477 |
-
$this->checkResponse($content, $url);
|
478 |
|
479 |
$stats = json_decode($content, $assoc = true);
|
480 |
if (!is_array($stats)) {
|
@@ -491,7 +512,10 @@ class CronArchive
|
|
491 |
|
492 |
$visitsForPeriod = $this->getVisitsFromApiResponse($stats);
|
493 |
|
494 |
-
|
|
|
|
|
|
|
495 |
|
496 |
$this->deleteInvalidatedArchives($archivesBeingQueried[$index]);
|
497 |
|
@@ -549,12 +573,14 @@ class CronArchive
|
|
549 |
return [$url, $segment, $plugin];
|
550 |
}
|
551 |
|
552 |
-
private function logArchiveJobFinished($url, $timer, $visits, $plugin = null, $report = null)
|
553 |
{
|
554 |
$params = UrlHelper::getArrayFromQueryString($url);
|
555 |
$visits = (int) $visits;
|
556 |
|
557 |
-
$
|
|
|
|
|
558 |
. "{$params['date']}, segment = '" . (isset($params['segment']) ? urldecode(urldecode($params['segment'])) : '') . "', "
|
559 |
. ($plugin ? "plugin = $plugin, " : "") . ($report ? "report = $report, " : "") . "$visits visits found. $timer");
|
560 |
}
|
@@ -692,6 +718,12 @@ class CronArchive
|
|
692 |
|
693 |
private function logNetworkError($url, $response)
|
694 |
{
|
|
|
|
|
|
|
|
|
|
|
|
|
695 |
$message = "Got invalid response from API request: $url. ";
|
696 |
if (empty($response)) {
|
697 |
$message .= "The response was empty. This usually means a server error. A solution to this error is generally to increase the value of 'memory_limit' in your php.ini file. ";
|
@@ -896,6 +928,11 @@ class CronArchive
|
|
896 |
}
|
897 |
|
898 |
foreach ($this->segmentArchiving->getAllSegmentsToArchive($idSite) as $segmentDefinition) {
|
|
|
|
|
|
|
|
|
|
|
899 |
$params = new Parameters(new Site($idSite), $periodObj, new Segment($segmentDefinition, [$idSite], $periodObj->getDateStart(), $periodObj->getDateEnd()));
|
900 |
if ($this->canWeSkipInvalidatingBecauseThereIsAUsablePeriod($params, $doNotIncludeTtlInExistingArchiveCheck)) {
|
901 |
$this->logger->debug(' Found usable archive for {archive}, skipping invalidation.', ['archive' => $params]);
|
@@ -924,6 +961,24 @@ class CronArchive
|
|
924 |
}
|
925 |
}
|
926 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
927 |
/**
|
928 |
* Returns true if there is an existing valid period we can use, or false if there isn't and the invalidation should go through.
|
929 |
*
|
@@ -1115,11 +1170,18 @@ class CronArchive
|
|
1115 |
}
|
1116 |
}
|
1117 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1118 |
// Try and not request older data we know is already archived
|
1119 |
if ($this->lastSuccessRunTimestamp !== false) {
|
1120 |
$dateLast = time() - $this->lastSuccessRunTimestamp;
|
1121 |
$this->logger->info("- Archiving was last executed without error "
|
1122 |
-
. $this->formatter->getPrettyTimeFromSeconds($dateLast, true) . " ago");
|
1123 |
}
|
1124 |
}
|
1125 |
|
23 |
use Piwik\CronArchive\SharedSiteIds;
|
24 |
use Piwik\CronArchive\StopArchiverException;
|
25 |
use Piwik\DataAccess\ArchiveSelector;
|
|
|
|
|
26 |
use Piwik\DataAccess\Model;
|
27 |
use Piwik\DataAccess\RawLogDao;
|
28 |
use Piwik\Exception\UnexpectedWebsiteFoundException;
|
160 |
*/
|
161 |
public $maxConcurrentArchivers = false;
|
162 |
|
163 |
+
/**
|
164 |
+
* Maximum number of sites to process during a single execution of the archiver.
|
165 |
+
*
|
166 |
+
* @var int|null
|
167 |
+
*/
|
168 |
+
public $maxSitesToProcess = null;
|
169 |
+
|
170 |
+
/**
|
171 |
+
* Maximum number of archives to process during a single execution of the archiver.
|
172 |
+
*
|
173 |
+
* Note that this is not a hard limit as the limit is only checked after all
|
174 |
+
* archives for a site have been processed.
|
175 |
+
*
|
176 |
+
* @var int|null
|
177 |
+
*/
|
178 |
+
public $maxArchivesToProcess = null;
|
179 |
+
|
180 |
private $archivingStartingTime;
|
181 |
|
182 |
private $formatter;
|
375 |
$queueConsumer = new QueueConsumer($this->logger, $this->websiteIdArchiveList, $countOfProcesses, $pid,
|
376 |
$this->model, $this->segmentArchiving, $this, $this->cliMultiRequestParser, $this->archiveFilter);
|
377 |
|
378 |
+
$queueConsumer->setMaxSitesToProcess($this->maxSitesToProcess);
|
379 |
+
|
380 |
while (true) {
|
381 |
if ($this->isMaintenanceModeEnabled()) {
|
382 |
$this->logger->info("Archiving will stop now because maintenance mode is enabled");
|
406 |
|
407 |
$successCount = $this->launchArchivingFor($archivesToProcess, $queueConsumer);
|
408 |
$numArchivesFinished += $successCount;
|
409 |
+
if ($this->maxArchivesToProcess && $numArchivesFinished >= $this->maxArchivesToProcess) {
|
410 |
+
$this->logger->info("Maximum number of archives to process per execution has been reached.");
|
411 |
+
break;
|
412 |
+
}
|
413 |
}
|
414 |
|
415 |
$this->disconnectDb();
|
495 |
|
496 |
foreach ($urls as $index => $url) {
|
497 |
$content = array_key_exists($index, $responses) ? $responses[$index] : null;
|
498 |
+
$checkInvalid = $this->checkResponse($content, $url);
|
499 |
|
500 |
$stats = json_decode($content, $assoc = true);
|
501 |
if (!is_array($stats)) {
|
512 |
|
513 |
$visitsForPeriod = $this->getVisitsFromApiResponse($stats);
|
514 |
|
515 |
+
|
516 |
+
$this->logArchiveJobFinished($url, $timers[$index], $visitsForPeriod,
|
517 |
+
$archivesBeingQueried[$index]['plugin'], $archivesBeingQueried[$index]['report'], !$checkInvalid);
|
518 |
+
|
519 |
|
520 |
$this->deleteInvalidatedArchives($archivesBeingQueried[$index]);
|
521 |
|
573 |
return [$url, $segment, $plugin];
|
574 |
}
|
575 |
|
576 |
+
private function logArchiveJobFinished($url, $timer, $visits, $plugin = null, $report = null, $wasSkipped = null)
|
577 |
{
|
578 |
$params = UrlHelper::getArrayFromQueryString($url);
|
579 |
$visits = (int) $visits;
|
580 |
|
581 |
+
$message = $wasSkipped ? "Skipped Archiving website" : "Archived website";
|
582 |
+
|
583 |
+
$this->logger->info($message." id {$params['idSite']}, period = {$params['period']}, date = "
|
584 |
. "{$params['date']}, segment = '" . (isset($params['segment']) ? urldecode(urldecode($params['segment'])) : '') . "', "
|
585 |
. ($plugin ? "plugin = $plugin, " : "") . ($report ? "report = $report, " : "") . "$visits visits found. $timer");
|
586 |
}
|
718 |
|
719 |
private function logNetworkError($url, $response)
|
720 |
{
|
721 |
+
|
722 |
+
if (preg_match("/Segment (.*?) is not a supported segment/i", $response, $match)) {
|
723 |
+
$this->logger->info($match[0]);
|
724 |
+
return false;
|
725 |
+
}
|
726 |
+
|
727 |
$message = "Got invalid response from API request: $url. ";
|
728 |
if (empty($response)) {
|
729 |
$message .= "The response was empty. This usually means a server error. A solution to this error is generally to increase the value of 'memory_limit' in your php.ini file. ";
|
928 |
}
|
929 |
|
930 |
foreach ($this->segmentArchiving->getAllSegmentsToArchive($idSite) as $segmentDefinition) {
|
931 |
+
|
932 |
+
// check if the segment is available
|
933 |
+
if (!$this->isSegmentAvailable($segmentDefinition, [$idSite])) {
|
934 |
+
continue;
|
935 |
+
}
|
936 |
$params = new Parameters(new Site($idSite), $periodObj, new Segment($segmentDefinition, [$idSite], $periodObj->getDateStart(), $periodObj->getDateEnd()));
|
937 |
if ($this->canWeSkipInvalidatingBecauseThereIsAUsablePeriod($params, $doNotIncludeTtlInExistingArchiveCheck)) {
|
938 |
$this->logger->debug(' Found usable archive for {archive}, skipping invalidation.', ['archive' => $params]);
|
961 |
}
|
962 |
}
|
963 |
|
964 |
+
|
965 |
+
/**
|
966 |
+
* check if segments that contain dimensions that don't exist anymore
|
967 |
+
* @param $segmentDefinition
|
968 |
+
* @param $idSites
|
969 |
+
* @return bool
|
970 |
+
*/
|
971 |
+
protected function isSegmentAvailable($segmentDefinition, $idSites)
|
972 |
+
{
|
973 |
+
try {
|
974 |
+
new Segment($segmentDefinition, $idSites);
|
975 |
+
} catch (\Exception $e) {
|
976 |
+
$this->logger->info("Segment '".$segmentDefinition."' is not a supported segment");
|
977 |
+
return false;
|
978 |
+
}
|
979 |
+
return true;
|
980 |
+
}
|
981 |
+
|
982 |
/**
|
983 |
* Returns true if there is an existing valid period we can use, or false if there isn't and the invalidation should go through.
|
984 |
*
|
1170 |
}
|
1171 |
}
|
1172 |
|
1173 |
+
if ($this->maxSitesToProcess) {
|
1174 |
+
$this->logger->info("- Maximum {$this->maxSitesToProcess} websites will be processed.");
|
1175 |
+
}
|
1176 |
+
if ($this->maxArchivesToProcess) {
|
1177 |
+
$this->logger->info("- Maximum {$this->maxArchivesToProcess} archives will be processed (soft limit).");
|
1178 |
+
}
|
1179 |
+
|
1180 |
// Try and not request older data we know is already archived
|
1181 |
if ($this->lastSuccessRunTimestamp !== false) {
|
1182 |
$dateLast = time() - $this->lastSuccessRunTimestamp;
|
1183 |
$this->logger->info("- Archiving was last executed without error "
|
1184 |
+
. $this->formatter->getPrettyTimeFromSeconds($dateLast, true) . " ago.");
|
1185 |
}
|
1186 |
}
|
1187 |
|
app/core/CronArchive/QueueConsumer.php
CHANGED
@@ -14,18 +14,14 @@ use Piwik\ArchiveProcessor\Loader;
|
|
14 |
use Piwik\ArchiveProcessor\Parameters;
|
15 |
use Piwik\ArchiveProcessor\Rules;
|
16 |
use Piwik\CliMulti\RequestParser;
|
17 |
-
use Piwik\Common;
|
18 |
use Piwik\CronArchive;
|
19 |
use Piwik\DataAccess\ArchiveSelector;
|
20 |
use Piwik\DataAccess\Model;
|
21 |
use Piwik\Date;
|
22 |
-
use Piwik\Db;
|
23 |
-
use Piwik\Exception\UnexpectedWebsiteFoundException;
|
24 |
use Piwik\Period;
|
25 |
use Piwik\Period\Factory as PeriodFactory;
|
26 |
use Piwik\Piwik;
|
27 |
use Piwik\Plugin\Manager;
|
28 |
-
use Piwik\Plugins\SitesManager\API;
|
29 |
use Piwik\Segment;
|
30 |
use Piwik\Site;
|
31 |
use Piwik\Timer;
|
@@ -108,6 +104,11 @@ class QueueConsumer
|
|
108 |
*/
|
109 |
private $currentSiteArchivingStartTime;
|
110 |
|
|
|
|
|
|
|
|
|
|
|
111 |
private $processedSiteCount = 0;
|
112 |
|
113 |
public function __construct(LoggerInterface $logger, $websiteIdArchiveList, $countOfProcesses, $pid, Model $model,
|
@@ -131,9 +132,22 @@ class QueueConsumer
|
|
131 |
$this->periodIdsToLabels = array_flip(Piwik::$idPeriods);
|
132 |
}
|
133 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
134 |
public function getNextArchivesToProcess()
|
135 |
{
|
136 |
if (empty($this->idSite)) {
|
|
|
|
|
|
|
|
|
137 |
$this->idSite = $this->getNextIdSiteToArchive();
|
138 |
if (empty($this->idSite)) { // no sites left to archive, stop
|
139 |
$this->logger->debug("No more sites left to archive, stopping.");
|
@@ -617,4 +631,19 @@ class QueueConsumer
|
|
617 |
{
|
618 |
return $this->idSite;
|
619 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
620 |
}
|
14 |
use Piwik\ArchiveProcessor\Parameters;
|
15 |
use Piwik\ArchiveProcessor\Rules;
|
16 |
use Piwik\CliMulti\RequestParser;
|
|
|
17 |
use Piwik\CronArchive;
|
18 |
use Piwik\DataAccess\ArchiveSelector;
|
19 |
use Piwik\DataAccess\Model;
|
20 |
use Piwik\Date;
|
|
|
|
|
21 |
use Piwik\Period;
|
22 |
use Piwik\Period\Factory as PeriodFactory;
|
23 |
use Piwik\Piwik;
|
24 |
use Piwik\Plugin\Manager;
|
|
|
25 |
use Piwik\Segment;
|
26 |
use Piwik\Site;
|
27 |
use Piwik\Timer;
|
104 |
*/
|
105 |
private $currentSiteArchivingStartTime;
|
106 |
|
107 |
+
/**
|
108 |
+
* @var int|null
|
109 |
+
*/
|
110 |
+
private $maxSitesToProcess = null;
|
111 |
+
|
112 |
private $processedSiteCount = 0;
|
113 |
|
114 |
public function __construct(LoggerInterface $logger, $websiteIdArchiveList, $countOfProcesses, $pid, Model $model,
|
132 |
$this->periodIdsToLabels = array_flip(Piwik::$idPeriods);
|
133 |
}
|
134 |
|
135 |
+
/**
|
136 |
+
* Get next archives to process.
|
137 |
+
*
|
138 |
+
* Returns either an array of archives to process for the current site (may be
|
139 |
+
* empty if there are no more archives to process for it) or null when there are
|
140 |
+
* no more sites to process.
|
141 |
+
*
|
142 |
+
* @return null|array
|
143 |
+
*/
|
144 |
public function getNextArchivesToProcess()
|
145 |
{
|
146 |
if (empty($this->idSite)) {
|
147 |
+
if ($this->maxSitesToProcess && $this->processedSiteCount >= $this->maxSitesToProcess) {
|
148 |
+
$this->logger->info("Maximum number of sites to process per execution has been reached.");
|
149 |
+
return null;
|
150 |
+
}
|
151 |
$this->idSite = $this->getNextIdSiteToArchive();
|
152 |
if (empty($this->idSite)) { // no sites left to archive, stop
|
153 |
$this->logger->debug("No more sites left to archive, stopping.");
|
631 |
{
|
632 |
return $this->idSite;
|
633 |
}
|
634 |
+
|
635 |
+
/**
|
636 |
+
* Set or get the maximum number of sites to process
|
637 |
+
*
|
638 |
+
* @param int|null $newValue New value or null to just return current value
|
639 |
+
*
|
640 |
+
* @return int|null New or existing value
|
641 |
+
*/
|
642 |
+
public function setMaxSitesToProcess($newValue = null)
|
643 |
+
{
|
644 |
+
if (null !== $newValue) {
|
645 |
+
$this->maxSitesToProcess = $newValue;
|
646 |
+
}
|
647 |
+
return $this->maxSitesToProcess;
|
648 |
+
}
|
649 |
}
|
app/core/CronArchive/SegmentArchiving.php
CHANGED
@@ -14,7 +14,6 @@ use Piwik\Archive\ArchiveInvalidator;
|
|
14 |
use Piwik\ArchiveProcessor\Rules;
|
15 |
use Piwik\Common;
|
16 |
use Piwik\Container\StaticContainer;
|
17 |
-
use Piwik\CronArchive;
|
18 |
use Piwik\Date;
|
19 |
use Piwik\Db;
|
20 |
use Piwik\Period\Range;
|
14 |
use Piwik\ArchiveProcessor\Rules;
|
15 |
use Piwik\Common;
|
16 |
use Piwik\Container\StaticContainer;
|
|
|
17 |
use Piwik\Date;
|
18 |
use Piwik\Db;
|
19 |
use Piwik\Period\Range;
|
app/core/DataAccess/ArchiveSelector.php
CHANGED
@@ -20,7 +20,6 @@ use Piwik\Db;
|
|
20 |
use Piwik\Period;
|
21 |
use Piwik\Period\Range;
|
22 |
use Piwik\Segment;
|
23 |
-
use Piwik\SettingsServer;
|
24 |
use Psr\Log\LoggerInterface;
|
25 |
|
26 |
/**
|
20 |
use Piwik\Period;
|
21 |
use Piwik\Period\Range;
|
22 |
use Piwik\Segment;
|
|
|
23 |
use Psr\Log\LoggerInterface;
|
24 |
|
25 |
/**
|
app/core/DataAccess/ArchivingDbAdapter.php
CHANGED
@@ -13,6 +13,7 @@ use Piwik\Config;
|
|
13 |
use Piwik\Db\AdapterInterface;
|
14 |
use Piwik\DbHelper;
|
15 |
use Psr\Log\LoggerInterface;
|
|
|
16 |
|
17 |
class ArchivingDbAdapter
|
18 |
{
|
@@ -48,7 +49,7 @@ class ArchivingDbAdapter
|
|
48 |
$sql = DbHelper::addMaxExecutionTimeHintToQuery($sql, $this->maxExecutionTime);
|
49 |
$this->logSql($sql);
|
50 |
|
51 |
-
return call_user_func_array([$this
|
52 |
}
|
53 |
|
54 |
public function query($sql)
|
@@ -56,7 +57,7 @@ class ArchivingDbAdapter
|
|
56 |
$sql = DbHelper::addMaxExecutionTimeHintToQuery($sql, $this->maxExecutionTime);
|
57 |
$this->logSql($sql);
|
58 |
|
59 |
-
return call_user_func_array([$this
|
60 |
}
|
61 |
|
62 |
public function fetchAll($sql)
|
@@ -64,7 +65,7 @@ class ArchivingDbAdapter
|
|
64 |
$sql = DbHelper::addMaxExecutionTimeHintToQuery($sql, $this->maxExecutionTime);
|
65 |
$this->logSql($sql);
|
66 |
|
67 |
-
return call_user_func_array([$this
|
68 |
}
|
69 |
|
70 |
public function fetchRow($sql)
|
@@ -72,7 +73,7 @@ class ArchivingDbAdapter
|
|
72 |
$sql = DbHelper::addMaxExecutionTimeHintToQuery($sql, $this->maxExecutionTime);
|
73 |
$this->logSql($sql);
|
74 |
|
75 |
-
return call_user_func_array([$this
|
76 |
}
|
77 |
|
78 |
public function fetchOne($sql)
|
@@ -80,7 +81,7 @@ class ArchivingDbAdapter
|
|
80 |
$sql = DbHelper::addMaxExecutionTimeHintToQuery($sql, $this->maxExecutionTime);
|
81 |
$this->logSql($sql);
|
82 |
|
83 |
-
return call_user_func_array([$this
|
84 |
}
|
85 |
|
86 |
public function fetchAssoc($sql)
|
@@ -88,7 +89,19 @@ class ArchivingDbAdapter
|
|
88 |
$sql = DbHelper::addMaxExecutionTimeHintToQuery($sql, $this->maxExecutionTime);
|
89 |
$this->logSql($sql);
|
90 |
|
91 |
-
return call_user_func_array([$this
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
92 |
}
|
93 |
|
94 |
private function logSql($sql)
|
@@ -98,4 +111,25 @@ class ArchivingDbAdapter
|
|
98 |
$this->logger->debug($sql);
|
99 |
}
|
100 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
101 |
}
|
13 |
use Piwik\Db\AdapterInterface;
|
14 |
use Piwik\DbHelper;
|
15 |
use Psr\Log\LoggerInterface;
|
16 |
+
use Exception;
|
17 |
|
18 |
class ArchivingDbAdapter
|
19 |
{
|
49 |
$sql = DbHelper::addMaxExecutionTimeHintToQuery($sql, $this->maxExecutionTime);
|
50 |
$this->logSql($sql);
|
51 |
|
52 |
+
return call_user_func_array([$this, "callFunction"], array_merge([__FUNCTION__], func_get_args()));
|
53 |
}
|
54 |
|
55 |
public function query($sql)
|
57 |
$sql = DbHelper::addMaxExecutionTimeHintToQuery($sql, $this->maxExecutionTime);
|
58 |
$this->logSql($sql);
|
59 |
|
60 |
+
return call_user_func_array([$this, "callFunction"], array_merge([__FUNCTION__], func_get_args()));
|
61 |
}
|
62 |
|
63 |
public function fetchAll($sql)
|
65 |
$sql = DbHelper::addMaxExecutionTimeHintToQuery($sql, $this->maxExecutionTime);
|
66 |
$this->logSql($sql);
|
67 |
|
68 |
+
return call_user_func_array([$this, "callFunction"], array_merge([__FUNCTION__], func_get_args()));
|
69 |
}
|
70 |
|
71 |
public function fetchRow($sql)
|
73 |
$sql = DbHelper::addMaxExecutionTimeHintToQuery($sql, $this->maxExecutionTime);
|
74 |
$this->logSql($sql);
|
75 |
|
76 |
+
return call_user_func_array([$this, "callFunction"], array_merge([__FUNCTION__], func_get_args()));
|
77 |
}
|
78 |
|
79 |
public function fetchOne($sql)
|
81 |
$sql = DbHelper::addMaxExecutionTimeHintToQuery($sql, $this->maxExecutionTime);
|
82 |
$this->logSql($sql);
|
83 |
|
84 |
+
return call_user_func_array([$this, "callFunction"], array_merge([__FUNCTION__], func_get_args()));
|
85 |
}
|
86 |
|
87 |
public function fetchAssoc($sql)
|
89 |
$sql = DbHelper::addMaxExecutionTimeHintToQuery($sql, $this->maxExecutionTime);
|
90 |
$this->logSql($sql);
|
91 |
|
92 |
+
return call_user_func_array([$this, "callFunction"], array_merge([__FUNCTION__], func_get_args()));
|
93 |
+
}
|
94 |
+
|
95 |
+
/**
|
96 |
+
* Test error number
|
97 |
+
*
|
98 |
+
* @param Exception $e
|
99 |
+
* @param string $errno
|
100 |
+
* @return bool
|
101 |
+
*/
|
102 |
+
public function isErrNo($e, $errno)
|
103 |
+
{
|
104 |
+
return $this->wrapped->isErrNo($e, $errno);
|
105 |
}
|
106 |
|
107 |
private function logSql($sql)
|
111 |
$this->logger->debug($sql);
|
112 |
}
|
113 |
}
|
114 |
+
|
115 |
+
private function callFunction($function) {
|
116 |
+
|
117 |
+
$args = func_get_args();
|
118 |
+
unset($args[0]);
|
119 |
+
|
120 |
+
try {
|
121 |
+
return call_user_func_array([$this->wrapped, $function], $args);
|
122 |
+
} catch (\Exception $e) {
|
123 |
+
if ($this->isErrNo($e, \Piwik\Updater\Migration\Db::ERROR_CODE_MAX_EXECUTION_TIME_EXCEEDED_QUERY_INTERRUPTED) ||
|
124 |
+
$this->isErrNo($e, \Piwik\Updater\Migration\Db::ERROR_CODE_MAX_EXECUTION_TIME_EXCEEDED_SORT_ABORTED)
|
125 |
+
)
|
126 |
+
{
|
127 |
+
$this->logger->warning('Archiver query exceeded maximum execution time: {details}',
|
128 |
+
['details' => json_encode($args, true)]);
|
129 |
+
|
130 |
+
}
|
131 |
+
throw $e;
|
132 |
+
}
|
133 |
+
}
|
134 |
+
|
135 |
}
|
app/core/DataAccess/LogAggregator.php
CHANGED
@@ -282,8 +282,7 @@ class LogAggregator
|
|
282 |
if (defined('PIWIK_TEST_MODE') && PIWIK_TEST_MODE) {
|
283 |
$engine = 'ENGINE=MEMORY';
|
284 |
}
|
285 |
-
$
|
286 |
-
$createTableSql = 'CREATE TEMPORARY TABLE ' . $table . ' (' . $tempTableIdVisitColumn . ') ' . $engine;
|
287 |
// we do not insert the data right away using create temporary table ... select ...
|
288 |
// to avoid metadata lock see eg https://www.percona.com/blog/2018/01/10/why-avoid-create-table-as-select-statement/
|
289 |
|
@@ -293,23 +292,7 @@ class LogAggregator
|
|
293 |
} catch (\Exception $e) {
|
294 |
if ($readerDb->isErrNo($e, \Piwik\Updater\Migration\Db::ERROR_CODE_TABLE_EXISTS)) {
|
295 |
return;
|
296 |
-
}
|
297 |
-
|| $readerDb->isErrNo($e, \Piwik\Updater\Migration\Db::ERROR_CODE_UNABLE_CREATE_TABLE_WITHOUT_PRIMARY_KEY
|
298 |
-
|| stripos($e->getMessage(), 'requires a primary key') !== false
|
299 |
-
|| stripos($e->getMessage(), 'table without a primary key') !== false)
|
300 |
-
) {
|
301 |
-
$createTableSql = str_replace($tempTableIdVisitColumn, $tempTableIdVisitColumn . ', PRIMARY KEY (`idvisit`)', $createTableSql);
|
302 |
-
|
303 |
-
try {
|
304 |
-
$readerDb->query($createTableSql);
|
305 |
-
} catch (\Exception $e) {
|
306 |
-
if ($readerDb->isErrNo($e, \Piwik\Updater\Migration\Db::ERROR_CODE_TABLE_EXISTS)) {
|
307 |
-
return;
|
308 |
-
} else {
|
309 |
-
throw $e;
|
310 |
-
}
|
311 |
-
}
|
312 |
-
} else {
|
313 |
throw $e;
|
314 |
}
|
315 |
}
|
282 |
if (defined('PIWIK_TEST_MODE') && PIWIK_TEST_MODE) {
|
283 |
$engine = 'ENGINE=MEMORY';
|
284 |
}
|
285 |
+
$createTableSql = 'CREATE TEMPORARY TABLE ' . $table . ' (idvisit BIGINT(10) UNSIGNED NOT NULL, PRIMARY KEY (`idvisit`)) ' . $engine;
|
|
|
286 |
// we do not insert the data right away using create temporary table ... select ...
|
287 |
// to avoid metadata lock see eg https://www.percona.com/blog/2018/01/10/why-avoid-create-table-as-select-statement/
|
288 |
|
292 |
} catch (\Exception $e) {
|
293 |
if ($readerDb->isErrNo($e, \Piwik\Updater\Migration\Db::ERROR_CODE_TABLE_EXISTS)) {
|
294 |
return;
|
295 |
+
} else {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
296 |
throw $e;
|
297 |
}
|
298 |
}
|
app/core/DataAccess/Model.php
CHANGED
@@ -82,7 +82,7 @@ class Model
|
|
82 |
break;
|
83 |
}
|
84 |
|
85 |
-
|
86 |
|
87 |
array_shift($duplicateArchives);
|
88 |
|
@@ -99,7 +99,7 @@ class Model
|
|
99 |
break;
|
100 |
}
|
101 |
|
102 |
-
|
103 |
$archiveIds[] = $idarchive; // does not matter what the value is, the latest is usable so older archives can be purged
|
104 |
}
|
105 |
}
|
@@ -157,7 +157,7 @@ class Model
|
|
157 |
|
158 |
if (!empty($name)) {
|
159 |
if (strpos($name, '.') !== false) {
|
160 |
-
|
161 |
} else {
|
162 |
$plugin = $name;
|
163 |
$name = null;
|
@@ -512,7 +512,14 @@ class Model
|
|
512 |
$idarchive = $sequence->getNextId();
|
513 |
} catch (Exception $e) {
|
514 |
// edge case: sequence was not found, create it now
|
515 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
516 |
|
517 |
$idarchive = $sequence->getNextId();
|
518 |
}
|
82 |
break;
|
83 |
}
|
84 |
|
85 |
+
[$idarchive, $value] = explode('.', $pair);
|
86 |
|
87 |
array_shift($duplicateArchives);
|
88 |
|
99 |
break;
|
100 |
}
|
101 |
|
102 |
+
[$idarchive, $value] = explode('.', $pair);
|
103 |
$archiveIds[] = $idarchive; // does not matter what the value is, the latest is usable so older archives can be purged
|
104 |
}
|
105 |
}
|
157 |
|
158 |
if (!empty($name)) {
|
159 |
if (strpos($name, '.') !== false) {
|
160 |
+
[$plugin, $name] = explode('.', $name, 2);
|
161 |
} else {
|
162 |
$plugin = $name;
|
163 |
$name = null;
|
512 |
$idarchive = $sequence->getNextId();
|
513 |
} catch (Exception $e) {
|
514 |
// edge case: sequence was not found, create it now
|
515 |
+
try {
|
516 |
+
$sequence->create();
|
517 |
+
} catch (Exception $ex) {
|
518 |
+
// Ignore duplicate entry error, as that means another request might have already created the sequence
|
519 |
+
if (!Db::get()->isErrNo($ex, \Piwik\Updater\Migration\Db::ERROR_CODE_DUPLICATE_ENTRY)) {
|
520 |
+
throw $ex;
|
521 |
+
}
|
522 |
+
}
|
523 |
|
524 |
$idarchive = $sequence->getNextId();
|
525 |
}
|
app/core/DataTable.php
CHANGED
@@ -11,7 +11,6 @@ namespace Piwik;
|
|
11 |
|
12 |
use Closure;
|
13 |
use Exception;
|
14 |
-
use Piwik\Archive\DataTableFactory;
|
15 |
use Piwik\DataTable\DataTableInterface;
|
16 |
use Piwik\DataTable\Manager;
|
17 |
use Piwik\DataTable\Renderer\Html;
|
11 |
|
12 |
use Closure;
|
13 |
use Exception;
|
|
|
14 |
use Piwik\DataTable\DataTableInterface;
|
15 |
use Piwik\DataTable\Manager;
|
16 |
use Piwik\DataTable\Renderer\Html;
|
app/core/DataTable/Map.php
CHANGED
@@ -11,7 +11,6 @@ namespace Piwik\DataTable;
|
|
11 |
use Closure;
|
12 |
use Piwik\Common;
|
13 |
use Piwik\DataTable;
|
14 |
-
use Piwik\DataTable\Renderer\Console;
|
15 |
use Piwik\DataTable\Renderer\Html;
|
16 |
|
17 |
/**
|
11 |
use Closure;
|
12 |
use Piwik\Common;
|
13 |
use Piwik\DataTable;
|
|
|
14 |
use Piwik\DataTable\Renderer\Html;
|
15 |
|
16 |
/**
|
app/core/DataTable/Renderer/Xml.php
CHANGED
@@ -179,7 +179,7 @@ class Xml extends Renderer
|
|
179 |
} else {
|
180 |
$xmlValue = self::formatValueXml($value);
|
181 |
|
182 |
-
if (strlen($xmlValue)
|
183 |
$result .= $prefixLines . $prefix . $xmlValue . $suffix . "\n";
|
184 |
} else {
|
185 |
$result .= $prefixLines . $emptyNode . "\n";
|
179 |
} else {
|
180 |
$xmlValue = self::formatValueXml($value);
|
181 |
|
182 |
+
if (strlen(strval($xmlValue)) !== 0) {
|
183 |
$result .= $prefixLines . $prefix . $xmlValue . $suffix . "\n";
|
184 |
} else {
|
185 |
$result .= $prefixLines . $emptyNode . "\n";
|
app/core/DataTable/Row.php
CHANGED
@@ -12,7 +12,6 @@ use Exception;
|
|
12 |
use Piwik\Container\StaticContainer;
|
13 |
use Piwik\DataTable;
|
14 |
use Piwik\Date;
|
15 |
-
use Piwik\Log;
|
16 |
use Piwik\Metrics;
|
17 |
use Piwik\Period;
|
18 |
use Psr\Log\LoggerInterface;
|
@@ -36,7 +35,8 @@ class Row extends \ArrayObject
|
|
36 |
*/
|
37 |
private static $unsummableColumns = array(
|
38 |
'label' => true,
|
39 |
-
'full_url' => true // column used w/ old Piwik versions,
|
|
|
40 |
);
|
41 |
|
42 |
// @see sumRow - implementation detail
|
@@ -677,6 +677,9 @@ class Row extends \ArrayObject
|
|
677 |
if (is_array($columnToSumValue)) {
|
678 |
$newValue = $thisColumnValue;
|
679 |
foreach ($columnToSumValue as $arrayIndex => $arrayValue) {
|
|
|
|
|
|
|
680 |
if (!isset($newValue[$arrayIndex])) {
|
681 |
$newValue[$arrayIndex] = false;
|
682 |
}
|
12 |
use Piwik\Container\StaticContainer;
|
13 |
use Piwik\DataTable;
|
14 |
use Piwik\Date;
|
|
|
15 |
use Piwik\Metrics;
|
16 |
use Piwik\Period;
|
17 |
use Psr\Log\LoggerInterface;
|
35 |
*/
|
36 |
private static $unsummableColumns = array(
|
37 |
'label' => true,
|
38 |
+
'full_url' => true, // column used w/ old Piwik versions,
|
39 |
+
'ts_archived' => true // date column used in metadata for proportional tooltips
|
40 |
);
|
41 |
|
42 |
// @see sumRow - implementation detail
|
677 |
if (is_array($columnToSumValue)) {
|
678 |
$newValue = $thisColumnValue;
|
679 |
foreach ($columnToSumValue as $arrayIndex => $arrayValue) {
|
680 |
+
if (!is_numeric($arrayIndex) && !$this->isSummableColumn($arrayIndex)) {
|
681 |
+
continue;
|
682 |
+
}
|
683 |
if (!isset($newValue[$arrayIndex])) {
|
684 |
$newValue[$arrayIndex] = false;
|
685 |
}
|
app/core/Date.php
CHANGED
@@ -889,6 +889,10 @@ class Date
|
|
889 |
case "ss":
|
890 |
case "s":
|
891 |
return $this->toString('s');
|
|
|
|
|
|
|
|
|
892 |
// am / pm
|
893 |
case "a":
|
894 |
return $this->toString('a') == 'am' ? $translator->translate('Intl_Time_AM') : $translator->translate('Intl_Time_PM');
|
@@ -911,7 +915,7 @@ class Date
|
|
911 |
}
|
912 |
|
913 |
protected static $tokens = array(
|
914 |
-
'G', 'y', 'M', 'L', 'd', 'h', 'H', 'k', 'K', 'm', 's', 'E', 'c', 'e', 'D', 'F', 'w', 'W', 'a', 'z', 'Z', 'v',
|
915 |
);
|
916 |
|
917 |
/**
|
889 |
case "ss":
|
890 |
case "s":
|
891 |
return $this->toString('s');
|
892 |
+
// would normally also include AM, PM, Noon and Midnight
|
893 |
+
case "b":
|
894 |
+
// would normally be a textual presentation like "in the afternoon"
|
895 |
+
case "B":
|
896 |
// am / pm
|
897 |
case "a":
|
898 |
return $this->toString('a') == 'am' ? $translator->translate('Intl_Time_AM') : $translator->translate('Intl_Time_PM');
|
915 |
}
|
916 |
|
917 |
protected static $tokens = array(
|
918 |
+
'G', 'y', 'M', 'L', 'd', 'h', 'H', 'k', 'K', 'm', 's', 'E', 'c', 'e', 'D', 'F', 'w', 'W', 'a', 'b', 'B', 'z', 'Z', 'v',
|
919 |
);
|
920 |
|
921 |
/**
|
app/core/Db.php
CHANGED
@@ -9,7 +9,6 @@
|
|
9 |
namespace Piwik;
|
10 |
|
11 |
use Exception;
|
12 |
-
use Piwik\DataAccess\TableMetadata;
|
13 |
use Piwik\Db\Adapter;
|
14 |
|
15 |
/**
|
@@ -40,6 +39,8 @@ class Db
|
|
40 |
|
41 |
private static $logQueries = true;
|
42 |
|
|
|
|
|
43 |
/**
|
44 |
* Returns the database connection and creates it if it hasn't been already.
|
45 |
*
|
9 |
namespace Piwik;
|
10 |
|
11 |
use Exception;
|
|
|
12 |
use Piwik\Db\Adapter;
|
13 |
|
14 |
/**
|
39 |
|
40 |
private static $logQueries = true;
|
41 |
|
42 |
+
// this is used for indicate TransactionLevel Cache
|
43 |
+
public $supportsUncommitted;
|
44 |
/**
|
45 |
* Returns the database connection and creates it if it hasn't been already.
|
46 |
*
|
app/core/Db/Adapter/Mysqli.php
CHANGED
@@ -25,6 +25,10 @@ class Mysqli extends Zend_Db_Adapter_Mysqli implements AdapterInterface
|
|
25 |
*
|
26 |
* @param array|Zend_Config $config database configuration
|
27 |
*/
|
|
|
|
|
|
|
|
|
28 |
public function __construct($config)
|
29 |
{
|
30 |
// Enable LOAD DATA INFILE
|
25 |
*
|
26 |
* @param array|Zend_Config $config database configuration
|
27 |
*/
|
28 |
+
|
29 |
+
// this is used for indicate TransactionLevel Cache
|
30 |
+
public $supportsUncommitted;
|
31 |
+
|
32 |
public function __construct($config)
|
33 |
{
|
34 |
// Enable LOAD DATA INFILE
|
app/core/Db/Adapter/Pdo/Mysql.php
CHANGED
@@ -29,6 +29,10 @@ class Mysql extends Zend_Db_Adapter_Pdo_Mysql implements AdapterInterface
|
|
29 |
*
|
30 |
* @param array|Zend_Config $config database configuration
|
31 |
*/
|
|
|
|
|
|
|
|
|
32 |
public function __construct($config)
|
33 |
{
|
34 |
// Enable LOAD DATA INFILE
|
29 |
*
|
30 |
* @param array|Zend_Config $config database configuration
|
31 |
*/
|
32 |
+
|
33 |
+
// this is used for indicate TransactionLevel Cache
|
34 |
+
public $supportsUncommitted;
|
35 |
+
|
36 |
public function __construct($config)
|
37 |
{
|
38 |
// Enable LOAD DATA INFILE
|
app/core/Db/Schema/Mysql.php
CHANGED
@@ -52,6 +52,7 @@ class Mysql implements SchemaInterface
|
|
52 |
superuser_access TINYINT(2) unsigned NOT NULL DEFAULT '0',
|
53 |
date_registered TIMESTAMP NULL,
|
54 |
ts_password_modified TIMESTAMP NULL,
|
|
|
55 |
PRIMARY KEY(login)
|
56 |
) ENGINE=$engine DEFAULT CHARSET=$charset
|
57 |
",
|
@@ -190,7 +191,7 @@ class Mysql implements SchemaInterface
|
|
190 |
PRIMARY KEY(idvisit),
|
191 |
INDEX index_idsite_config_datetime (idsite, config_id, visit_last_action_time),
|
192 |
INDEX index_idsite_datetime (idsite, visit_last_action_time),
|
193 |
-
INDEX index_idsite_idvisitor (idsite, idvisitor)
|
194 |
) ENGINE=$engine DEFAULT CHARSET=$charset
|
195 |
",
|
196 |
|
@@ -358,6 +359,19 @@ class Mysql implements SchemaInterface
|
|
358 |
PRIMARY KEY (`key`)
|
359 |
) ENGINE=$engine DEFAULT CHARSET=$charset
|
360 |
",
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
361 |
);
|
362 |
|
363 |
return $tables;
|
@@ -574,8 +588,9 @@ class Mysql implements SchemaInterface
|
|
574 |
// note that the token_auth value is anonymous, which is assigned by default as well in the Login plugin
|
575 |
$db = $this->getDb();
|
576 |
$db->query("INSERT IGNORE INTO " . Common::prefixTable("user") . "
|
577 |
-
(`login`, `password`, `email`, `twofactor_secret`, `superuser_access`, `date_registered`, `ts_password_modified
|
578 |
-
|
|
|
579 |
|
580 |
$model = new Model();
|
581 |
$model->addTokenAuth('anonymous', 'anonymous', 'anonymous default token', $now);
|
52 |
superuser_access TINYINT(2) unsigned NOT NULL DEFAULT '0',
|
53 |
date_registered TIMESTAMP NULL,
|
54 |
ts_password_modified TIMESTAMP NULL,
|
55 |
+
idchange_last_viewed TIMESTAMP NULL,
|
56 |
PRIMARY KEY(login)
|
57 |
) ENGINE=$engine DEFAULT CHARSET=$charset
|
58 |
",
|
191 |
PRIMARY KEY(idvisit),
|
192 |
INDEX index_idsite_config_datetime (idsite, config_id, visit_last_action_time),
|
193 |
INDEX index_idsite_datetime (idsite, visit_last_action_time),
|
194 |
+
INDEX index_idsite_idvisitor (idsite, idvisitor, visit_last_action_time DESC)
|
195 |
) ENGINE=$engine DEFAULT CHARSET=$charset
|
196 |
",
|
197 |
|
359 |
PRIMARY KEY (`key`)
|
360 |
) ENGINE=$engine DEFAULT CHARSET=$charset
|
361 |
",
|
362 |
+
'changes' => "CREATE TABLE `{$prefixTables}changes` (
|
363 |
+
`idchange` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
|
364 |
+
`created_time` DATETIME NOT NULL,
|
365 |
+
`plugin_name` VARCHAR(60) NOT NULL,
|
366 |
+
`version` VARCHAR(20) NOT NULL,
|
367 |
+
`title` VARCHAR(255) NOT NULL,
|
368 |
+
`description` TEXT NULL,
|
369 |
+
`link_name` VARCHAR(255) NULL,
|
370 |
+
`link` VARCHAR(255) NULL,
|
371 |
+
PRIMARY KEY(`idchange`),
|
372 |
+
UNIQUE KEY unique_plugin_version_title (`plugin_name`, `version`, `title`(100))
|
373 |
+
) ENGINE=$engine DEFAULT CHARSET=$charset
|
374 |
+
",
|
375 |
);
|
376 |
|
377 |
return $tables;
|
588 |
// note that the token_auth value is anonymous, which is assigned by default as well in the Login plugin
|
589 |
$db = $this->getDb();
|
590 |
$db->query("INSERT IGNORE INTO " . Common::prefixTable("user") . "
|
591 |
+
(`login`, `password`, `email`, `twofactor_secret`, `superuser_access`, `date_registered`, `ts_password_modified`,
|
592 |
+
`idchange_last_viewed`)
|
593 |
+
VALUES ( 'anonymous', '', 'anonymous@example.org', '', 0, '$now', '$now' , NULL);");
|
594 |
|
595 |
$model = new Model();
|
596 |
$model->addTokenAuth('anonymous', 'anonymous', 'anonymous default token', $now);
|
app/core/Db/TransactionLevel.php
CHANGED
@@ -40,12 +40,18 @@ class TransactionLevel
|
|
40 |
|
41 |
public function setUncommitted()
|
42 |
{
|
|
|
|
|
|
|
|
|
|
|
43 |
try {
|
44 |
$backup = $this->db->fetchOne('SELECT @@TX_ISOLATION');
|
45 |
} catch (\Exception $e) {
|
46 |
try {
|
47 |
$backup = $this->db->fetchOne('SELECT @@transaction_isolation');
|
48 |
} catch (\Exception $e) {
|
|
|
49 |
return false;
|
50 |
}
|
51 |
}
|
@@ -54,9 +60,17 @@ class TransactionLevel
|
|
54 |
$this->db->query('SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED');
|
55 |
$this->statusBackup = $backup;
|
56 |
|
57 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
58 |
} catch (\Exception $e) {
|
|
|
59 |
// catch eg 1665 Cannot execute statement: impossible to write to binary log since BINLOG_FORMAT = STATEMENT and at least one table uses a storage engine limited to row-based logging. InnoDB is limited to row-logging when transaction isolation level is READ COMMITTED or READ UNCOMMITTED
|
|
|
60 |
$this->restorePreviousStatus();
|
61 |
return false;
|
62 |
}
|
@@ -77,7 +91,5 @@ class TransactionLevel
|
|
77 |
$this->db->query('SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ');
|
78 |
}
|
79 |
}
|
80 |
-
|
81 |
}
|
82 |
-
|
83 |
}
|
40 |
|
41 |
public function setUncommitted()
|
42 |
{
|
43 |
+
if ($this->db->supportsUncommitted === false) {
|
44 |
+
// we know "Uncommitted" transaction level is not supported, we don't need to do anything as it won't work to set the status
|
45 |
+
return false;
|
46 |
+
}
|
47 |
+
|
48 |
try {
|
49 |
$backup = $this->db->fetchOne('SELECT @@TX_ISOLATION');
|
50 |
} catch (\Exception $e) {
|
51 |
try {
|
52 |
$backup = $this->db->fetchOne('SELECT @@transaction_isolation');
|
53 |
} catch (\Exception $e) {
|
54 |
+
$this->db->supportsUncommitted = false;
|
55 |
return false;
|
56 |
}
|
57 |
}
|
60 |
$this->db->query('SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED');
|
61 |
$this->statusBackup = $backup;
|
62 |
|
63 |
+
if ($this->db->supportsUncommitted === null) {
|
64 |
+
// the first time we need to check if the transaction level actually works by
|
65 |
+
// trying to set something w/ the new transaction isolation level
|
66 |
+
Option::set(self::TEST_OPTION_NAME, '1');
|
67 |
+
}
|
68 |
+
|
69 |
+
$this->db->supportsUncommitted = true;
|
70 |
} catch (\Exception $e) {
|
71 |
+
// setting the transaction level status did not work
|
72 |
// catch eg 1665 Cannot execute statement: impossible to write to binary log since BINLOG_FORMAT = STATEMENT and at least one table uses a storage engine limited to row-based logging. InnoDB is limited to row-logging when transaction isolation level is READ COMMITTED or READ UNCOMMITTED
|
73 |
+
$this->db->supportsUncommitted = false;
|
74 |
$this->restorePreviousStatus();
|
75 |
return false;
|
76 |
}
|
91 |
$this->db->query('SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ');
|
92 |
}
|
93 |
}
|
|
|
94 |
}
|
|
|
95 |
}
|
app/core/DeviceDetector/DeviceDetectorFactory.php
CHANGED
@@ -9,7 +9,6 @@
|
|
9 |
namespace Piwik\DeviceDetector;
|
10 |
|
11 |
use DeviceDetector\DeviceDetector;
|
12 |
-
use Piwik\Common;
|
13 |
use Piwik\Container\StaticContainer;
|
14 |
|
15 |
class DeviceDetectorFactory
|
9 |
namespace Piwik\DeviceDetector;
|
10 |
|
11 |
use DeviceDetector\DeviceDetector;
|
|
|
12 |
use Piwik\Container\StaticContainer;
|
13 |
|
14 |
class DeviceDetectorFactory
|
app/core/Exception/NotYetInstalledException.php
CHANGED
@@ -8,8 +8,6 @@
|
|
8 |
*/
|
9 |
namespace Piwik\Exception;
|
10 |
|
11 |
-
use Piwik\Common;
|
12 |
-
use Piwik\Url;
|
13 |
use Throwable;
|
14 |
|
15 |
class NotYetInstalledException extends InvalidRequestParameterException
|
8 |
*/
|
9 |
namespace Piwik\Exception;
|
10 |
|
|
|
|
|
11 |
use Throwable;
|
12 |
|
13 |
class NotYetInstalledException extends InvalidRequestParameterException
|
app/core/ExceptionHandler.php
CHANGED
@@ -1,4 +1,5 @@
|
|
1 |
<?php
|
|
|
2 |
/**
|
3 |
* Matomo - free/libre analytics platform
|
4 |
*
|
@@ -6,6 +7,7 @@
|
|
6 |
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
7 |
*
|
8 |
*/
|
|
|
9 |
namespace Piwik;
|
10 |
|
11 |
use DI\DependencyException;
|
@@ -25,7 +27,7 @@ class ExceptionHandler
|
|
25 |
{
|
26 |
public static function setUp()
|
27 |
{
|
28 |
-
set_exception_handler(
|
29 |
}
|
30 |
|
31 |
/**
|
@@ -97,7 +99,7 @@ class ExceptionHandler
|
|
97 |
|
98 |
try {
|
99 |
echo self::getErrorResponse($exception);
|
100 |
-
} catch(Exception $e) {
|
101 |
// When there are failures while generating the HTML error response itself,
|
102 |
// we simply print out the error message instead.
|
103 |
echo $exception->getMessage();
|
@@ -118,11 +120,9 @@ class ExceptionHandler
|
|
118 |
$isHtmlMessage = method_exists($ex, 'isHtmlMessage') && $ex->isHtmlMessage();
|
119 |
|
120 |
if (!$isHtmlMessage && Request::isApiRequest($_GET)) {
|
121 |
-
|
122 |
$outputFormat = strtolower(Common::getRequestVar('format', 'xml', 'string', $_GET + $_POST));
|
123 |
$response = new ResponseBuilder($outputFormat);
|
124 |
return $response->getResponseException($ex);
|
125 |
-
|
126 |
} elseif (!$isHtmlMessage) {
|
127 |
$message = Common::sanitizeInputValue($message);
|
128 |
}
|
@@ -146,7 +146,24 @@ class ExceptionHandler
|
|
146 |
}
|
147 |
}
|
148 |
|
149 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
150 |
|
151 |
try {
|
152 |
/**
|
@@ -158,7 +175,7 @@ class ExceptionHandler
|
|
158 |
* @param string &$result The HTML of the error page.
|
159 |
* @param Exception $ex The Exception displayed in the error page.
|
160 |
*/
|
161 |
-
Piwik::postEvent('FrontController.modifyErrorPage',
|
162 |
} catch (ContainerDoesNotExistException $ex) {
|
163 |
// this can happen when an error occurs before the Piwik environment is created
|
164 |
}
|
@@ -166,17 +183,17 @@ class ExceptionHandler
|
|
166 |
return $result;
|
167 |
}
|
168 |
|
169 |
-
private static function logException($exception, $loglevel=Log::ERROR)
|
170 |
{
|
171 |
try {
|
172 |
switch ($loglevel) {
|
173 |
-
case(Log::DEBUG):
|
174 |
StaticContainer::get(LoggerInterface::class)->debug('Uncaught exception: {exception}', [
|
175 |
'exception' => $exception,
|
176 |
'ignoreInScreenWriter' => true,
|
177 |
]);
|
178 |
break;
|
179 |
-
case(Log::ERROR):
|
180 |
default:
|
181 |
StaticContainer::get(LoggerInterface::class)->error('Uncaught exception: {exception}', [
|
182 |
'exception' => $exception,
|
1 |
<?php
|
2 |
+
|
3 |
/**
|
4 |
* Matomo - free/libre analytics platform
|
5 |
*
|
7 |
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
8 |
*
|
9 |
*/
|
10 |
+
|
11 |
namespace Piwik;
|
12 |
|
13 |
use DI\DependencyException;
|
27 |
{
|
28 |
public static function setUp()
|
29 |
{
|
30 |
+
set_exception_handler(['Piwik\ExceptionHandler', 'handleException']);
|
31 |
}
|
32 |
|
33 |
/**
|
99 |
|
100 |
try {
|
101 |
echo self::getErrorResponse($exception);
|
102 |
+
} catch (Exception $e) {
|
103 |
// When there are failures while generating the HTML error response itself,
|
104 |
// we simply print out the error message instead.
|
105 |
echo $exception->getMessage();
|
120 |
$isHtmlMessage = method_exists($ex, 'isHtmlMessage') && $ex->isHtmlMessage();
|
121 |
|
122 |
if (!$isHtmlMessage && Request::isApiRequest($_GET)) {
|
|
|
123 |
$outputFormat = strtolower(Common::getRequestVar('format', 'xml', 'string', $_GET + $_POST));
|
124 |
$response = new ResponseBuilder($outputFormat);
|
125 |
return $response->getResponseException($ex);
|
|
|
126 |
} elseif (!$isHtmlMessage) {
|
127 |
$message = Common::sanitizeInputValue($message);
|
128 |
}
|
146 |
}
|
147 |
}
|
148 |
|
149 |
+
// Unsupported browser errors shouldn't be written to the web server log. At DEBUG logging level this error will
|
150 |
+
// be written to the application log instead
|
151 |
+
$writeErrorLog = !($ex instanceof \Piwik\Exception\NotSupportedBrowserException);
|
152 |
+
|
153 |
+
$hostname = Url::getRFCValidHostname();
|
154 |
+
$hostStr = $hostname ? "[$hostname] " : '- ';
|
155 |
+
|
156 |
+
$result = Piwik_GetErrorMessagePage(
|
157 |
+
$message,
|
158 |
+
$debugTrace,
|
159 |
+
true,
|
160 |
+
true,
|
161 |
+
$logoHeaderUrl,
|
162 |
+
$logoFaviconUrl,
|
163 |
+
null,
|
164 |
+
$hostStr,
|
165 |
+
$writeErrorLog
|
166 |
+
);
|
167 |
|
168 |
try {
|
169 |
/**
|
175 |
* @param string &$result The HTML of the error page.
|
176 |
* @param Exception $ex The Exception displayed in the error page.
|
177 |
*/
|
178 |
+
Piwik::postEvent('FrontController.modifyErrorPage', [&$result, $ex]);
|
179 |
} catch (ContainerDoesNotExistException $ex) {
|
180 |
// this can happen when an error occurs before the Piwik environment is created
|
181 |
}
|
183 |
return $result;
|
184 |
}
|
185 |
|
186 |
+
private static function logException($exception, $loglevel = Log::ERROR)
|
187 |
{
|
188 |
try {
|
189 |
switch ($loglevel) {
|
190 |
+
case (Log::DEBUG):
|
191 |
StaticContainer::get(LoggerInterface::class)->debug('Uncaught exception: {exception}', [
|
192 |
'exception' => $exception,
|
193 |
'ignoreInScreenWriter' => true,
|
194 |
]);
|
195 |
break;
|
196 |
+
case (Log::ERROR):
|
197 |
default:
|
198 |
StaticContainer::get(LoggerInterface::class)->error('Uncaught exception: {exception}', [
|
199 |
'exception' => $exception,
|
app/core/Filechecks.php
CHANGED
@@ -107,9 +107,13 @@ class Filechecks
|
|
107 |
{
|
108 |
$realpath = Filesystem::realpath(PIWIK_INCLUDE_PATH . '/');
|
109 |
$message = '';
|
110 |
-
|
|
|
|
|
111 |
$message .= self::getMakeWritableCommand($realpath);
|
112 |
-
|
|
|
|
|
113 |
$message .= 'After you execute these commands (or change permissions via your FTP software), refresh the page and you should be able to use the "Automatic Update" feature.';
|
114 |
return $message;
|
115 |
}
|
107 |
{
|
108 |
$realpath = Filesystem::realpath(PIWIK_INCLUDE_PATH . '/');
|
109 |
$message = '';
|
110 |
+
if (!SettingsServer::isWindows()) {
|
111 |
+
$message .= "<br /><code>" . self::getCommandToChangeOwnerOfPiwikFiles() . "</code><br />";
|
112 |
+
}
|
113 |
$message .= self::getMakeWritableCommand($realpath);
|
114 |
+
if (!SettingsServer::isWindows()) {
|
115 |
+
$message .= '<code>chmod 755 ' . $realpath . '/console</code><br />';
|
116 |
+
}
|
117 |
$message .= 'After you execute these commands (or change permissions via your FTP software), refresh the page and you should be able to use the "Automatic Update" feature.';
|
118 |
return $message;
|
119 |
}
|
app/core/Filesystem.php
CHANGED
@@ -294,8 +294,17 @@ class Filesystem
|
|
294 |
*/
|
295 |
public static function directoryDiff($source, $target)
|
296 |
{
|
297 |
-
$
|
298 |
-
$
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
299 |
|
300 |
$sourceFiles = array_map(function ($file) use ($source) {
|
301 |
return str_replace($source, '', $file);
|
@@ -305,7 +314,11 @@ class Filesystem
|
|
305 |
return str_replace($target, '', $file);
|
306 |
}, $targetFiles);
|
307 |
|
308 |
-
|
|
|
|
|
|
|
|
|
309 |
|
310 |
return array_values($diff);
|
311 |
}
|
@@ -548,6 +561,23 @@ class Filesystem
|
|
548 |
return $isPathWithinTmpFolder;
|
549 |
}
|
550 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
551 |
/**
|
552 |
* in tmp/ (sub-)folder(s) we create empty index.htm|php files
|
553 |
*
|
294 |
*/
|
295 |
public static function directoryDiff($source, $target)
|
296 |
{
|
297 |
+
$flags = 0;
|
298 |
+
$pattern = '*';
|
299 |
+
|
300 |
+
if (defined('GLOB_BRACE')) {
|
301 |
+
// The GLOB_BRACE flag is not available on some non GNU systems, like Solaris or Alpine Linux.
|
302 |
+
$flags = GLOB_BRACE;
|
303 |
+
$pattern = '{,.}*[!.]*'; // matches all files and folders, including those starting with ".", but excludes "." and ".."
|
304 |
+
}
|
305 |
+
|
306 |
+
$sourceFiles = self::globr($source, $pattern, $flags);
|
307 |
+
$targetFiles = self::globr($target, $pattern, $flags);
|
308 |
|
309 |
$sourceFiles = array_map(function ($file) use ($source) {
|
310 |
return str_replace($source, '', $file);
|
314 |
return str_replace($target, '', $file);
|
315 |
}, $targetFiles);
|
316 |
|
317 |
+
if (FileSystem::isFileSystemCaseInsensitive()) {
|
318 |
+
$diff = array_udiff($targetFiles, $sourceFiles, 'strcasecmp');
|
319 |
+
} else {
|
320 |
+
$diff = array_diff($targetFiles, $sourceFiles);
|
321 |
+
}
|
322 |
|
323 |
return array_values($diff);
|
324 |
}
|
561 |
return $isPathWithinTmpFolder;
|
562 |
}
|
563 |
|
564 |
+
/**
|
565 |
+
* Check if the filesystem is case sensitive by writing a temporary file
|
566 |
+
*
|
567 |
+
* @return bool
|
568 |
+
*/
|
569 |
+
public static function isFileSystemCaseInsensitive() : bool
|
570 |
+
{
|
571 |
+
$testFileName = 'caseSensitivityTest.txt';
|
572 |
+
$pathTmp = StaticContainer::get('path.tmp');
|
573 |
+
@file_put_contents($pathTmp.'/'.$testFileName, 'Nothing to see here.');
|
574 |
+
if (\file_exists($pathTmp.'/'.strtolower($testFileName))) {
|
575 |
+
// Wrote caseSensitivityTest.txt but casesensitivitytest.txt exists, so case insensitive
|
576 |
+
return true;
|
577 |
+
}
|
578 |
+
return false;
|
579 |
+
}
|
580 |
+
|
581 |
/**
|
582 |
* in tmp/ (sub-)folder(s) we create empty index.htm|php files
|
583 |
*
|
app/core/FrontController.php
CHANGED
@@ -11,6 +11,7 @@ namespace Piwik;
|
|
11 |
|
12 |
use Exception;
|
13 |
use Piwik\API\Request;
|
|
|
14 |
use Piwik\Container\StaticContainer;
|
15 |
use Piwik\DataTable\Manager;
|
16 |
use Piwik\Exception\AuthenticationFailedException;
|
@@ -396,6 +397,11 @@ class FrontController extends Singleton
|
|
396 |
|
397 |
$loggedIn = false;
|
398 |
|
|
|
|
|
|
|
|
|
|
|
399 |
// don't use sessionauth in cli mode
|
400 |
// try authenticating w/ session first...
|
401 |
$sessionAuth = $this->makeSessionAuthenticator();
|
@@ -423,9 +429,7 @@ class FrontController extends Singleton
|
|
423 |
$this->makeAuthenticator($sessionAuth); // Piwik\Auth must be set to the correct Login plugin
|
424 |
}
|
425 |
|
426 |
-
|
427 |
-
SupportedBrowser::checkIfBrowserSupported();
|
428 |
-
}
|
429 |
|
430 |
// Force the auth to use the token_auth if specified, so that embed dashboard
|
431 |
// and all other non widgetized controller methods works fine
|
@@ -457,6 +461,10 @@ class FrontController extends Singleton
|
|
457 |
|
458 |
if (is_null($action)) {
|
459 |
$action = Common::getRequestVar('action', false);
|
|
|
|
|
|
|
|
|
460 |
}
|
461 |
|
462 |
if (Session::isSessionStarted()) {
|
@@ -486,10 +494,14 @@ class FrontController extends Singleton
|
|
486 |
|
487 |
protected function handleMaintenanceMode()
|
488 |
{
|
489 |
-
if ((
|
490 |
return;
|
491 |
}
|
492 |
-
|
|
|
|
|
|
|
|
|
493 |
|
494 |
$logoUrl = 'plugins/Morpheus/images/logo.svg';
|
495 |
$faviconUrl = 'plugins/CoreHome/images/favicon.png';
|
11 |
|
12 |
use Exception;
|
13 |
use Piwik\API\Request;
|
14 |
+
use Piwik\Config\GeneralConfig;
|
15 |
use Piwik\Container\StaticContainer;
|
16 |
use Piwik\DataTable\Manager;
|
17 |
use Piwik\Exception\AuthenticationFailedException;
|
397 |
|
398 |
$loggedIn = false;
|
399 |
|
400 |
+
//move this up unsupported Browser do not create session
|
401 |
+
if ($this->isSupportedBrowserCheckNeeded()) {
|
402 |
+
SupportedBrowser::checkIfBrowserSupported();
|
403 |
+
}
|
404 |
+
|
405 |
// don't use sessionauth in cli mode
|
406 |
// try authenticating w/ session first...
|
407 |
$sessionAuth = $this->makeSessionAuthenticator();
|
429 |
$this->makeAuthenticator($sessionAuth); // Piwik\Auth must be set to the correct Login plugin
|
430 |
}
|
431 |
|
432 |
+
|
|
|
|
|
433 |
|
434 |
// Force the auth to use the token_auth if specified, so that embed dashboard
|
435 |
// and all other non widgetized controller methods works fine
|
461 |
|
462 |
if (is_null($action)) {
|
463 |
$action = Common::getRequestVar('action', false);
|
464 |
+
if ($action !== false) {
|
465 |
+
// If a value was provided, check it has the correct type.
|
466 |
+
$action = Common::getRequestVar('action', null, 'string');
|
467 |
+
}
|
468 |
}
|
469 |
|
470 |
if (Session::isSessionStarted()) {
|
494 |
|
495 |
protected function handleMaintenanceMode()
|
496 |
{
|
497 |
+
if ((GeneralConfig::getConfigValue('maintenance_mode') != 1) || Common::isPhpCliMode() ) {
|
498 |
return;
|
499 |
}
|
500 |
+
|
501 |
+
// as request matomo behind load balancer should not return 503. https://github.com/matomo-org/matomo/issues/18054
|
502 |
+
if (GeneralConfig::getConfigValue('multi_server_environment') != 1) {
|
503 |
+
Common::sendResponseCode(503);
|
504 |
+
}
|
505 |
|
506 |
$logoUrl = 'plugins/Morpheus/images/logo.svg';
|
507 |
$faviconUrl = 'plugins/CoreHome/images/favicon.png';
|
app/core/Http.php
CHANGED
@@ -226,7 +226,7 @@ class Http
|
|
226 |
$isBlocked = false;
|
227 |
|
228 |
foreach ($disallowedHosts as $host) {
|
229 |
-
if (preg_match(self::convertWildcardToPattern($host), $parsedUrl['host']) === 1) {
|
230 |
$isBlocked = true;
|
231 |
break;
|
232 |
}
|
226 |
$isBlocked = false;
|
227 |
|
228 |
foreach ($disallowedHosts as $host) {
|
229 |
+
if (!empty($parsedUrl['host']) && preg_match(self::convertWildcardToPattern($host), $parsedUrl['host']) === 1) {
|
230 |
$isBlocked = true;
|
231 |
break;
|
232 |
}
|
app/core/Http/ControllerResolver.php
CHANGED
@@ -10,7 +10,6 @@ namespace Piwik\Http;
|
|
10 |
|
11 |
use DI\FactoryInterface;
|
12 |
use Exception;
|
13 |
-
use Piwik\Plugin\Controller;
|
14 |
use Piwik\Plugin\ReportsProvider;
|
15 |
use Piwik\Plugin\WidgetsProvider;
|
16 |
|
10 |
|
11 |
use DI\FactoryInterface;
|
12 |
use Exception;
|
|
|
13 |
use Piwik\Plugin\ReportsProvider;
|
14 |
use Piwik\Plugin\WidgetsProvider;
|
15 |
|
app/core/Mail/Transport.php
CHANGED
@@ -15,7 +15,6 @@ use Piwik\Config;
|
|
15 |
use Piwik\Container\StaticContainer;
|
16 |
use Piwik\Mail;
|
17 |
use Piwik\Piwik;
|
18 |
-
use Piwik\Version;
|
19 |
|
20 |
class Transport
|
21 |
{
|
15 |
use Piwik\Container\StaticContainer;
|
16 |
use Piwik\Mail;
|
17 |
use Piwik\Piwik;
|
|
|
18 |
|
19 |
class Transport
|
20 |
{
|
app/core/Menu/MenuAbstract.php
CHANGED
@@ -98,10 +98,11 @@ abstract class MenuAbstract extends Singleton
|
|
98 |
* @param bool|string $tooltip An optional tooltip to display or false to display the tooltip.
|
99 |
* @param bool|string $icon An icon classname, such as "icon-add". Only supported by admin menu
|
100 |
* @param bool|string $onclick Will execute the on click handler instead of executing the link. Only supported by admin menu.
|
|
|
101 |
* @since 2.7.0
|
102 |
* @api
|
103 |
*/
|
104 |
-
public function addItem($menuName, $subMenuName, $url, $order = 50, $tooltip = false, $icon = false, $onclick = false)
|
105 |
{
|
106 |
// make sure the idSite value used is numeric (hack-y fix for #3426)
|
107 |
if (isset($url['idSite']) && !is_numeric($url['idSite'])) {
|
@@ -116,7 +117,8 @@ abstract class MenuAbstract extends Singleton
|
|
116 |
$order,
|
117 |
$tooltip,
|
118 |
$icon,
|
119 |
-
$onclick
|
|
|
120 |
);
|
121 |
}
|
122 |
|
@@ -144,7 +146,7 @@ abstract class MenuAbstract extends Singleton
|
|
144 |
* @param int $order
|
145 |
* @param bool|string $tooltip Tooltip to display.
|
146 |
*/
|
147 |
-
private function buildMenuItem($menuName, $subMenuName, $url, $order = 50, $tooltip = false, $icon = false, $onclick = false)
|
148 |
{
|
149 |
if (!isset($this->menu[$menuName])) {
|
150 |
$this->menu[$menuName] = array(
|
@@ -158,17 +160,22 @@ abstract class MenuAbstract extends Singleton
|
|
158 |
$this->menu[$menuName]['_order'] = $order;
|
159 |
$this->menu[$menuName]['_name'] = $menuName;
|
160 |
$this->menu[$menuName]['_tooltip'] = $tooltip;
|
|
|
161 |
if (!empty($this->menuIcons[$menuName])) {
|
162 |
$this->menu[$menuName]['_icon'] = $this->menuIcons[$menuName];
|
163 |
} else {
|
164 |
$this->menu[$menuName]['_icon'] = '';
|
165 |
}
|
|
|
|
|
|
|
166 |
}
|
167 |
if (!empty($subMenuName)) {
|
168 |
$this->menu[$menuName][$subMenuName]['_url'] = $url;
|
169 |
$this->menu[$menuName][$subMenuName]['_order'] = $order;
|
170 |
$this->menu[$menuName][$subMenuName]['_name'] = $subMenuName;
|
171 |
$this->menu[$menuName][$subMenuName]['_tooltip'] = $tooltip;
|
|
|
172 |
$this->menu[$menuName][$subMenuName]['_icon'] = $icon;
|
173 |
$this->menu[$menuName][$subMenuName]['_onclick'] = $onclick;
|
174 |
$this->menu[$menuName]['_hasSubmenu'] = true;
|
@@ -185,7 +192,7 @@ abstract class MenuAbstract extends Singleton
|
|
185 |
private function buildMenu()
|
186 |
{
|
187 |
foreach ($this->menuEntries as $menuEntry) {
|
188 |
-
$this->buildMenuItem($menuEntry[0], $menuEntry[1], $menuEntry[2], $menuEntry[3], $menuEntry[4], $menuEntry[5], $menuEntry[6]);
|
189 |
}
|
190 |
}
|
191 |
|
98 |
* @param bool|string $tooltip An optional tooltip to display or false to display the tooltip.
|
99 |
* @param bool|string $icon An icon classname, such as "icon-add". Only supported by admin menu
|
100 |
* @param bool|string $onclick Will execute the on click handler instead of executing the link. Only supported by admin menu.
|
101 |
+
* @param string $attribute Will add this string as a link attribute.
|
102 |
* @since 2.7.0
|
103 |
* @api
|
104 |
*/
|
105 |
+
public function addItem($menuName, $subMenuName, $url, $order = 50, $tooltip = false, $icon = false, $onclick = false, $attribute = false)
|
106 |
{
|
107 |
// make sure the idSite value used is numeric (hack-y fix for #3426)
|
108 |
if (isset($url['idSite']) && !is_numeric($url['idSite'])) {
|
117 |
$order,
|
118 |
$tooltip,
|
119 |
$icon,
|
120 |
+
$onclick,
|
121 |
+
$attribute
|
122 |
);
|
123 |
}
|
124 |
|
146 |
* @param int $order
|
147 |
* @param bool|string $tooltip Tooltip to display.
|
148 |
*/
|
149 |
+
private function buildMenuItem($menuName, $subMenuName, $url, $order = 50, $tooltip = false, $icon = false, $onclick = false, $attribute = false)
|
150 |
{
|
151 |
if (!isset($this->menu[$menuName])) {
|
152 |
$this->menu[$menuName] = array(
|
160 |
$this->menu[$menuName]['_order'] = $order;
|
161 |
$this->menu[$menuName]['_name'] = $menuName;
|
162 |
$this->menu[$menuName]['_tooltip'] = $tooltip;
|
163 |
+
$this->menu[$menuName]['_attribute'] = $attribute;
|
164 |
if (!empty($this->menuIcons[$menuName])) {
|
165 |
$this->menu[$menuName]['_icon'] = $this->menuIcons[$menuName];
|
166 |
} else {
|
167 |
$this->menu[$menuName]['_icon'] = '';
|
168 |
}
|
169 |
+
if (!empty($onclick)) {
|
170 |
+
$this->menu[$menuName]['_onclick'] = $onclick;
|
171 |
+
}
|
172 |
}
|
173 |
if (!empty($subMenuName)) {
|
174 |
$this->menu[$menuName][$subMenuName]['_url'] = $url;
|
175 |
$this->menu[$menuName][$subMenuName]['_order'] = $order;
|
176 |
$this->menu[$menuName][$subMenuName]['_name'] = $subMenuName;
|
177 |
$this->menu[$menuName][$subMenuName]['_tooltip'] = $tooltip;
|
178 |
+
$this->menu[$menuName][$subMenuName]['_attribute'] = $attribute;
|
179 |
$this->menu[$menuName][$subMenuName]['_icon'] = $icon;
|
180 |
$this->menu[$menuName][$subMenuName]['_onclick'] = $onclick;
|
181 |
$this->menu[$menuName]['_hasSubmenu'] = true;
|
192 |
private function buildMenu()
|
193 |
{
|
194 |
foreach ($this->menuEntries as $menuEntry) {
|
195 |
+
$this->buildMenuItem($menuEntry[0], $menuEntry[1], $menuEntry[2], $menuEntry[3], $menuEntry[4], $menuEntry[5], $menuEntry[6], $menuEntry[7]);
|
196 |
}
|
197 |
}
|
198 |
|
app/core/Metrics.php
CHANGED
@@ -9,7 +9,6 @@
|
|
9 |
namespace Piwik;
|
10 |
|
11 |
use Piwik\Cache as PiwikCache;
|
12 |
-
use Piwik\Container\StaticContainer;
|
13 |
|
14 |
require_once PIWIK_INCLUDE_PATH . "/core/Piwik.php";
|
15 |
|
9 |
namespace Piwik;
|
10 |
|
11 |
use Piwik\Cache as PiwikCache;
|
|
|
12 |
|
13 |
require_once PIWIK_INCLUDE_PATH . "/core/Piwik.php";
|
14 |
|
app/core/NumberFormatter.php
CHANGED
@@ -142,7 +142,7 @@ class NumberFormatter
|
|
142 |
*/
|
143 |
public function formatCurrency($value, $currency, $precision=2)
|
144 |
{
|
145 |
-
$newValue = trim($value, " \0\x0B$currency");
|
146 |
if (!is_numeric($newValue)) {
|
147 |
return $value;
|
148 |
}
|
142 |
*/
|
143 |
public function formatCurrency($value, $currency, $precision=2)
|
144 |
{
|
145 |
+
$newValue = trim(strval($value), " \0\x0B$currency");
|
146 |
if (!is_numeric($newValue)) {
|
147 |
return $value;
|
148 |
}
|
app/core/Period/Range.php
CHANGED
@@ -263,7 +263,7 @@ class Range extends Period
|
|
263 |
if (strpos($strDateEnd, '-') === false) {
|
264 |
$timezone = $this->timezone;
|
265 |
}
|
266 |
-
$endDate = Date::factory($strDateEnd, $timezone);
|
267 |
} else {
|
268 |
throw new Exception($this->translator->translate('General_ExceptionInvalidDateRange', array($this->strDate, ' \'lastN\', \'previousN\', \'YYYY-MM-DD,YYYY-MM-DD\'')));
|
269 |
}
|
@@ -498,6 +498,16 @@ class Range extends Period
|
|
498 |
return array($strLastDate, $lastPeriod);
|
499 |
}
|
500 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
501 |
|
502 |
private static function getNumDaysDifference(Date $date1, Date $date2)
|
503 |
{
|
263 |
if (strpos($strDateEnd, '-') === false) {
|
264 |
$timezone = $this->timezone;
|
265 |
}
|
266 |
+
$endDate = Date::factory($strDateEnd, $timezone)->setTime("00:00:00");
|
267 |
} else {
|
268 |
throw new Exception($this->translator->translate('General_ExceptionInvalidDateRange', array($this->strDate, ' \'lastN\', \'previousN\', \'YYYY-MM-DD,YYYY-MM-DD\'')));
|
269 |
}
|
498 |
return array($strLastDate, $lastPeriod);
|
499 |
}
|
500 |
|
501 |
+
/**
|
502 |
+
* Return the number of days contained in this range
|
503 |
+
*
|
504 |
+
* @return int
|
505 |
+
* @throws Exception
|
506 |
+
*/
|
507 |
+
public function getDayCount()
|
508 |
+
{
|
509 |
+
return (self::getNumDaysDifference($this->getDateStart(), $this->getDateEnd()) + 1);
|
510 |
+
}
|
511 |
|
512 |
private static function getNumDaysDifference(Date $date1, Date $date2)
|
513 |
{
|
app/core/Piwik.php
CHANGED
@@ -185,7 +185,7 @@ class Piwik
|
|
185 |
$user = APIUsersManager::getInstance()->getUser(Piwik::getCurrentUserLogin());
|
186 |
return $user['date_registered'] ?? '';
|
187 |
}
|
188 |
-
|
189 |
/**
|
190 |
* Returns the current user's Last Seen.
|
191 |
*
|
@@ -889,4 +889,32 @@ class Piwik
|
|
889 |
|
890 |
return $translator->translate($translationId, $args, $language);
|
891 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
892 |
}
|
185 |
$user = APIUsersManager::getInstance()->getUser(Piwik::getCurrentUserLogin());
|
186 |
return $user['date_registered'] ?? '';
|
187 |
}
|
188 |
+
|
189 |
/**
|
190 |
* Returns the current user's Last Seen.
|
191 |
*
|
889 |
|
890 |
return $translator->translate($translationId, $args, $language);
|
891 |
}
|
892 |
+
|
893 |
+
/**
|
894 |
+
* Returns the period provided in the current request.
|
895 |
+
* If no $default is provided, this method will throw an Exception if `period` can't be found in the request
|
896 |
+
*
|
897 |
+
* @param string|null $default default value to use
|
898 |
+
* @throws Exception
|
899 |
+
* @return string
|
900 |
+
* @api
|
901 |
+
*/
|
902 |
+
public static function getPeriod($default = null)
|
903 |
+
{
|
904 |
+
return Common::getRequestVar('period', $default, 'string');
|
905 |
+
}
|
906 |
+
|
907 |
+
/**
|
908 |
+
* Returns the date provided in the current request.
|
909 |
+
* If no $default is provided, this method will throw an Exception if `date` can't be found in the request
|
910 |
+
*
|
911 |
+
* @param string|null $default default value to use
|
912 |
+
* @throws Exception
|
913 |
+
* @return string
|
914 |
+
* @api
|
915 |
+
*/
|
916 |
+
public static function getDate($default = null)
|
917 |
+
{
|
918 |
+
return Common::getRequestVar('date', $default, 'string');
|
919 |
+
}
|
920 |
}
|
app/core/Plugin.php
CHANGED
@@ -648,6 +648,28 @@ class Plugin
|
|
648 |
}
|
649 |
return $dependency;
|
650 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
651 |
}
|
652 |
|
653 |
}
|
648 |
}
|
649 |
return $dependency;
|
650 |
}
|
651 |
+
|
652 |
+
/**
|
653 |
+
* Get all changes for this plugin
|
654 |
+
*
|
655 |
+
* @return array Array of changes
|
656 |
+
* [{"title":"abc","description":"xyz","linkName":"def","link":"https://link","version":"1.2.3"}]
|
657 |
+
*/
|
658 |
+
public function getChanges()
|
659 |
+
{
|
660 |
+
$file = Manager::getPluginDirectory($this->pluginName).'/changes.json';
|
661 |
+
if (file_exists($file)) {
|
662 |
+
$json = file_get_contents($file);
|
663 |
+
if ($json) {
|
664 |
+
$changes = json_decode($json, true);
|
665 |
+
if ($changes && is_array($changes)) {
|
666 |
+
return array_reverse($changes);
|
667 |
+
}
|
668 |
+
}
|
669 |
+
}
|
670 |
+
return [];
|
671 |
+
}
|
672 |
+
|
673 |
}
|
674 |
|
675 |
}
|
app/core/Plugin/ArchivedMetric.php
CHANGED
@@ -147,10 +147,7 @@ class ArchivedMetric extends Metric
|
|
147 |
case Dimension::TYPE_DURATION_S:
|
148 |
return $formatter->getPrettyTimeFromSeconds($value, $displayAsSentence = true);
|
149 |
case Dimension::TYPE_DURATION_MS:
|
150 |
-
$val =
|
151 |
-
if ($val > 60) {
|
152 |
-
$val = round($val);
|
153 |
-
}
|
154 |
return $formatter->getPrettyTimeFromSeconds($val, $displayAsSentence = true);
|
155 |
case Dimension::TYPE_PERCENT:
|
156 |
return $formatter->getPrettyPercentFromQuotient($value);
|
147 |
case Dimension::TYPE_DURATION_S:
|
148 |
return $formatter->getPrettyTimeFromSeconds($value, $displayAsSentence = true);
|
149 |
case Dimension::TYPE_DURATION_MS:
|
150 |
+
$val = round(($value / 1000), ($value / 1000) > 60 ? 0 : 2);
|
|
|
|
|
|
|
151 |
return $formatter->getPrettyTimeFromSeconds($val, $displayAsSentence = true);
|
152 |
case Dimension::TYPE_PERCENT:
|
153 |
return $formatter->getPrettyPercentFromQuotient($value);
|
app/core/Plugin/ComputedMetric.php
CHANGED
@@ -167,10 +167,7 @@ class ComputedMetric extends ProcessedMetric
|
|
167 |
case Dimension::TYPE_DURATION_S:
|
168 |
return $formatter->getPrettyTimeFromSeconds(round($value), $displayAsSentence = true);
|
169 |
case Dimension::TYPE_DURATION_MS:
|
170 |
-
$val =
|
171 |
-
if ($val > 60) {
|
172 |
-
$val = round($val);
|
173 |
-
}
|
174 |
return $formatter->getPrettyTimeFromSeconds($val, $displayAsSentence = true);
|
175 |
case Dimension::TYPE_PERCENT:
|
176 |
return $formatter->getPrettyPercentFromQuotient($value);
|
167 |
case Dimension::TYPE_DURATION_S:
|
168 |
return $formatter->getPrettyTimeFromSeconds(round($value), $displayAsSentence = true);
|
169 |
case Dimension::TYPE_DURATION_MS:
|
170 |
+
$val = round(($value / 1000), ($value / 1000) > 60 ? 0 : 2);
|
|
|
|
|
|
|
171 |
return $formatter->getPrettyTimeFromSeconds($val, $displayAsSentence = true);
|
172 |
case Dimension::TYPE_PERCENT:
|
173 |
return $formatter->getPrettyPercentFromQuotient($value);
|
app/core/Plugin/Controller.php
CHANGED
@@ -476,25 +476,14 @@ abstract class Controller
|
|
476 |
*/
|
477 |
protected function getGraphParamsModified($paramsToSet = array())
|
478 |
{
|
479 |
-
|
480 |
-
|
481 |
-
} else {
|
482 |
-
$period = $paramsToSet['period'];
|
483 |
-
}
|
484 |
if ($period === 'range') {
|
485 |
return $paramsToSet;
|
486 |
}
|
487 |
-
if (!isset($paramsToSet['range'])) {
|
488 |
-
$range = 'last30';
|
489 |
-
} else {
|
490 |
-
$range = $paramsToSet['range'];
|
491 |
-
}
|
492 |
|
493 |
-
|
494 |
-
|
495 |
-
} else {
|
496 |
-
$endDate = $paramsToSet['date'];
|
497 |
-
}
|
498 |
|
499 |
if (is_null($this->site)) {
|
500 |
throw new NoAccessException("Website not initialized, check that you are logged in and/or using the correct token_auth.");
|
@@ -640,10 +629,10 @@ abstract class Controller
|
|
640 |
$maxDate = Date::factory('now', $siteTimezone);
|
641 |
$this->setMaxDateView($maxDate, $view);
|
642 |
|
643 |
-
$rawDate =
|
644 |
Period::checkDateFormat($rawDate);
|
645 |
|
646 |
-
$periodStr =
|
647 |
|
648 |
if ($periodStr !== 'range') {
|
649 |
$date = Date::factory($this->strDate);
|
@@ -923,14 +912,15 @@ abstract class Controller
|
|
923 |
|
924 |
$periodValidator = new PeriodValidator();
|
925 |
|
926 |
-
$currentPeriod =
|
927 |
-
$view->displayUniqueVisitors = SettingsPiwik::isUniqueVisitorsEnabled($currentPeriod);
|
928 |
$availablePeriods = $periodValidator->getPeriodsAllowedForUI();
|
929 |
|
930 |
if (! $periodValidator->isPeriodAllowedForUI($currentPeriod)) {
|
931 |
throw new Exception("Period must be one of: " . implode(", ", $availablePeriods));
|
932 |
}
|
933 |
|
|
|
|
|
934 |
$found = array_search($currentPeriod, $availablePeriods);
|
935 |
unset($availablePeriods[$found]);
|
936 |
|
476 |
*/
|
477 |
protected function getGraphParamsModified($paramsToSet = array())
|
478 |
{
|
479 |
+
$period = $paramsToSet['period'] ?? Piwik::getPeriod();
|
480 |
+
|
|
|
|
|
|
|
481 |
if ($period === 'range') {
|
482 |
return $paramsToSet;
|
483 |
}
|
|
|
|
|
|
|
|
|
|
|
484 |
|
485 |
+
$range = isset($paramsToSet['range']) ? $paramsToSet['range'] : 'last30';
|
486 |
+
$endDate = isset($paramsToSet['date']) ? $paramsToSet['date'] : $this->strDate;
|
|
|
|
|
|
|
487 |
|
488 |
if (is_null($this->site)) {
|
489 |
throw new NoAccessException("Website not initialized, check that you are logged in and/or using the correct token_auth.");
|
629 |
$maxDate = Date::factory('now', $siteTimezone);
|
630 |
$this->setMaxDateView($maxDate, $view);
|
631 |
|
632 |
+
$rawDate = Piwik::getDate();
|
633 |
Period::checkDateFormat($rawDate);
|
634 |
|
635 |
+
$periodStr = Piwik::getPeriod();
|
636 |
|
637 |
if ($periodStr !== 'range') {
|
638 |
$date = Date::factory($this->strDate);
|
912 |
|
913 |
$periodValidator = new PeriodValidator();
|
914 |
|
915 |
+
$currentPeriod = Piwik::getPeriod();
|
|
|
916 |
$availablePeriods = $periodValidator->getPeriodsAllowedForUI();
|
917 |
|
918 |
if (! $periodValidator->isPeriodAllowedForUI($currentPeriod)) {
|
919 |
throw new Exception("Period must be one of: " . implode(", ", $availablePeriods));
|
920 |
}
|
921 |
|
922 |
+
$view->displayUniqueVisitors = SettingsPiwik::isUniqueVisitorsEnabled($currentPeriod);
|
923 |
+
|
924 |
$found = array_search($currentPeriod, $availablePeriods);
|
925 |
unset($availablePeriods[$found]);
|
926 |
|
app/core/Plugin/Dimension/VisitDimension.php
CHANGED
@@ -12,6 +12,7 @@ use Piwik\CacheId;
|
|
12 |
use Piwik\Cache as PiwikCache;
|
13 |
use Piwik\Columns\Dimension;
|
14 |
use Piwik\Common;
|
|
|
15 |
use Piwik\Db;
|
16 |
use Piwik\DbHelper;
|
17 |
use Piwik\Plugin\Manager as PluginManager;
|
@@ -346,4 +347,51 @@ abstract class VisitDimension extends Dimension
|
|
346 |
|
347 |
return $instances;
|
348 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
349 |
}
|
12 |
use Piwik\Cache as PiwikCache;
|
13 |
use Piwik\Columns\Dimension;
|
14 |
use Piwik\Common;
|
15 |
+
use Piwik\DataTable;
|
16 |
use Piwik\Db;
|
17 |
use Piwik\DbHelper;
|
18 |
use Piwik\Plugin\Manager as PluginManager;
|
347 |
|
348 |
return $instances;
|
349 |
}
|
350 |
+
|
351 |
+
/**
|
352 |
+
* Sort a key => value array descending by the number of occurances of the key in the supplied table and column
|
353 |
+
*
|
354 |
+
* @param array $array Key value array
|
355 |
+
* @param DataTable $table Datatable from which to count occurances
|
356 |
+
* @param string $keyColumn Column in the datatable to match against the array key
|
357 |
+
* @param int $maxValuesToReturn Limit the return array to this number of elements
|
358 |
+
*
|
359 |
+
* @return array An array of values from the source array sorted by most occurances, descending
|
360 |
+
*/
|
361 |
+
public function sortStaticListByUsage(array $array, DataTable $table, string $keyColumn, int $maxValuesToReturn) : array
|
362 |
+
{
|
363 |
+
// Convert to multi-dimensional array and count the number of visits for each browser name
|
364 |
+
foreach ($array as $k => $v) {
|
365 |
+
$array[$k] = ['count' => 0, 'name' => $v];
|
366 |
+
}
|
367 |
+
$array['xx'] = ['count' => 0, 'name' => 'Unknown'];
|
368 |
+
|
369 |
+
foreach ($table->getRows() as $row) {
|
370 |
+
if (isset($row[$keyColumn])) {
|
371 |
+
if (isset($array[$row[$keyColumn]])) {
|
372 |
+
$array[$row[$keyColumn]]['count']++;
|
373 |
+
} else {
|
374 |
+
$array['xx']['count']++;
|
375 |
+
}
|
376 |
+
}
|
377 |
+
}
|
378 |
+
// Sort by most visits descending
|
379 |
+
uasort($array, function($a, $b) {
|
380 |
+
return $a <=> $b;
|
381 |
+
});
|
382 |
+
$array = array_reverse($array, true);
|
383 |
+
|
384 |
+
// Flatten and limit the return array
|
385 |
+
$flat = [];
|
386 |
+
$i = 0;
|
387 |
+
foreach ($array as $k => $v) {
|
388 |
+
$flat[$k] = $v['name'];
|
389 |
+
$i++;
|
390 |
+
if ($i == ($maxValuesToReturn)) {
|
391 |
+
break;
|
392 |
+
}
|
393 |
+
}
|
394 |
+
|
395 |
+
return array_values($flat);
|
396 |
+
}
|
397 |
}
|
app/core/Plugin/Manager.php
CHANGED
@@ -16,7 +16,6 @@ use Piwik\Common;
|
|
16 |
use Piwik\Config;
|
17 |
use Piwik\Config as PiwikConfig;
|
18 |
use Piwik\Container\StaticContainer;
|
19 |
-
use Piwik\Date;
|
20 |
use Piwik\Development;
|
21 |
use Piwik\EventDispatcher;
|
22 |
use Piwik\Exception\PluginDeactivatedException;
|
16 |
use Piwik\Config;
|
17 |
use Piwik\Config as PiwikConfig;
|
18 |
use Piwik\Container\StaticContainer;
|
|
|
19 |
use Piwik\Development;
|
20 |
use Piwik\EventDispatcher;
|
21 |
use Piwik\Exception\PluginDeactivatedException;
|
app/core/Plugin/MetadataLoader.php
CHANGED
@@ -11,7 +11,6 @@ namespace Piwik\Plugin;
|
|
11 |
use Exception;
|
12 |
use Piwik\Piwik;
|
13 |
use Piwik\Version;
|
14 |
-
use Piwik\Plugin;
|
15 |
|
16 |
/**
|
17 |
* @see core/Version.php
|
11 |
use Exception;
|
12 |
use Piwik\Piwik;
|
13 |
use Piwik\Version;
|
|
|
14 |
|
15 |
/**
|
16 |
* @see core/Version.php
|
app/core/Plugin/Segment.php
CHANGED
@@ -56,6 +56,7 @@ class Segment
|
|
56 |
private $unionOfSegments;
|
57 |
private $isInternalSegment = false;
|
58 |
private $suggestedValuesApi = '';
|
|
|
59 |
|
60 |
/**
|
61 |
* If true, this segment will only be visible to a registered user (see API.getSegmentsMetadata).
|
@@ -323,6 +324,14 @@ class Segment
|
|
323 |
$this->suggestedValuesApi = $suggestedValuesApi;
|
324 |
}
|
325 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
326 |
/**
|
327 |
* You can restrict the access to this segment by passing a boolean `false`. For instance if you want to make
|
328 |
* a certain segment only available to users having super user access you could do the following:
|
@@ -342,11 +351,12 @@ class Segment
|
|
342 |
public function toArray()
|
343 |
{
|
344 |
$segment = array(
|
345 |
-
'type'
|
346 |
-
'category'
|
347 |
-
'name'
|
348 |
-
'segment'
|
349 |
-
'sqlSegment'
|
|
|
350 |
);
|
351 |
|
352 |
if (!empty($this->unionOfSegments)) {
|
56 |
private $unionOfSegments;
|
57 |
private $isInternalSegment = false;
|
58 |
private $suggestedValuesApi = '';
|
59 |
+
private $needsMostFrequentValues = true;
|
60 |
|
61 |
/**
|
62 |
* If true, this segment will only be visible to a registered user (see API.getSegmentsMetadata).
|
324 |
$this->suggestedValuesApi = $suggestedValuesApi;
|
325 |
}
|
326 |
|
327 |
+
/**
|
328 |
+
* @param bool $value
|
329 |
+
*/
|
330 |
+
public function setNeedsMostFrequentValues(bool $value)
|
331 |
+
{
|
332 |
+
$this->needsMostFrequentValues = $value;
|
333 |
+
}
|
334 |
+
|
335 |
/**
|
336 |
* You can restrict the access to this segment by passing a boolean `false`. For instance if you want to make
|
337 |
* a certain segment only available to users having super user access you could do the following:
|
351 |
public function toArray()
|
352 |
{
|
353 |
$segment = array(
|
354 |
+
'type' => $this->type,
|
355 |
+
'category' => $this->category,
|
356 |
+
'name' => $this->name,
|
357 |
+
'segment' => $this->segment,
|
358 |
+
'sqlSegment' => $this->sqlSegment,
|
359 |
+
'needsMostFrequentValues' => $this->needsMostFrequentValues,
|
360 |
);
|
361 |
|
362 |
if (!empty($this->unionOfSegments)) {
|
app/core/Plugin/Visualization.php
CHANGED
@@ -14,6 +14,7 @@ use Piwik\API\Proxy;
|
|
14 |
use Piwik\API\Request;
|
15 |
use Piwik\API\Request as ApiRequest;
|
16 |
use Piwik\API\ResponseBuilder;
|
|
|
17 |
use Piwik\Common;
|
18 |
use Piwik\Container\StaticContainer;
|
19 |
use Piwik\DataTable;
|
@@ -156,7 +157,6 @@ class Visualization extends ViewDataTable
|
|
156 |
|
157 |
private $templateVars = array();
|
158 |
private $reportLastUpdatedMessage = null;
|
159 |
-
private $metadata = null;
|
160 |
protected $metricsFormatter = null;
|
161 |
|
162 |
/**
|
@@ -232,6 +232,7 @@ class Visualization extends ViewDataTable
|
|
232 |
// if it's likely that the report data for this data table has been purged,
|
233 |
// set whether we should display a message to that effect.
|
234 |
$view->showReportDataWasPurgedMessage = $this->hasReportBeenPurged();
|
|
|
235 |
$view->deleteReportsOlderThan = Option::get('delete_reports_older_than');
|
236 |
}
|
237 |
|
@@ -456,14 +457,35 @@ class Visualization extends ViewDataTable
|
|
456 |
}
|
457 |
|
458 |
// deal w/ table metadata
|
|
|
459 |
if ($this->dataTable instanceof DataTable) {
|
460 |
-
$
|
461 |
-
|
462 |
-
if
|
463 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
464 |
}
|
465 |
}
|
466 |
|
|
|
|
|
|
|
|
|
|
|
467 |
$pivotBy = Common::getRequestVar('pivotBy', false) ?: $this->requestConfig->pivotBy;
|
468 |
if (empty($pivotBy)
|
469 |
&& $this->dataTable instanceof DataTable
|
@@ -556,14 +578,16 @@ class Visualization extends ViewDataTable
|
|
556 |
}
|
557 |
}
|
558 |
|
|
|
559 |
/**
|
560 |
* Returns prettified and translated text that describes when a report was last updated.
|
561 |
*
|
|
|
562 |
* @return string
|
|
|
563 |
*/
|
564 |
-
private function makePrettyArchivedOnText()
|
565 |
{
|
566 |
-
$dateText = $this->metadata[DataTable::ARCHIVED_DATE_METADATA_NAME];
|
567 |
$date = Date::factory($dateText);
|
568 |
$today = mktime(0, 0, 0);
|
569 |
$metricsFormatter = new HtmlFormatter();
|
@@ -600,6 +624,22 @@ class Visualization extends ViewDataTable
|
|
600 |
return PrivacyManager::hasReportBeenPurged($this->dataTable);
|
601 |
}
|
602 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
603 |
/**
|
604 |
* Returns array of properties that should be visible to client side JavaScript. The data
|
605 |
* will be available in the data-props HTML attribute of the .dataTable div.
|
14 |
use Piwik\API\Request;
|
15 |
use Piwik\API\Request as ApiRequest;
|
16 |
use Piwik\API\ResponseBuilder;
|
17 |
+
use Piwik\ArchiveProcessor\Rules;
|
18 |
use Piwik\Common;
|
19 |
use Piwik\Container\StaticContainer;
|
20 |
use Piwik\DataTable;
|
157 |
|
158 |
private $templateVars = array();
|
159 |
private $reportLastUpdatedMessage = null;
|
|
|
160 |
protected $metricsFormatter = null;
|
161 |
|
162 |
/**
|
232 |
// if it's likely that the report data for this data table has been purged,
|
233 |
// set whether we should display a message to that effect.
|
234 |
$view->showReportDataWasPurgedMessage = $this->hasReportBeenPurged();
|
235 |
+
$view->showPluginArchiveDisabled = $this->hasReportSegmentDisabled();
|
236 |
$view->deleteReportsOlderThan = Option::get('delete_reports_older_than');
|
237 |
}
|
238 |
|
457 |
}
|
458 |
|
459 |
// deal w/ table metadata
|
460 |
+
$metadata = null;
|
461 |
if ($this->dataTable instanceof DataTable) {
|
462 |
+
$metadata = $this->dataTable->getAllTableMetadata();
|
463 |
+
} else {
|
464 |
+
// if the dataTable is Map
|
465 |
+
if ($this->dataTable instanceof DataTable\Map) {
|
466 |
+
// load all the data
|
467 |
+
$dataTable = $this->dataTable->getDataTables();
|
468 |
+
// find the latest key
|
469 |
+
foreach ($dataTable as $item) {
|
470 |
+
$itemMetaData = $item->getAllTableMetadata();
|
471 |
+
// initial metadata and update metadata if current is more recent
|
472 |
+
if (!empty($itemMetaData[DataTable::ARCHIVED_DATE_METADATA_NAME])
|
473 |
+
&& (
|
474 |
+
empty($metadata[DataTable::ARCHIVED_DATE_METADATA_NAME])
|
475 |
+
|| strtotime($itemMetaData[DataTable::ARCHIVED_DATE_METADATA_NAME]) > strtotime($metadata[DataTable::ARCHIVED_DATE_METADATA_NAME])
|
476 |
+
)
|
477 |
+
) {
|
478 |
+
$metadata = $itemMetaData;
|
479 |
+
}
|
480 |
+
}
|
481 |
}
|
482 |
}
|
483 |
|
484 |
+
// if metadata set display report date
|
485 |
+
if (!empty($metadata[DataTable::ARCHIVED_DATE_METADATA_NAME])) {
|
486 |
+
$this->reportLastUpdatedMessage = $this->makePrettyArchivedOnText($metadata[DataTable::ARCHIVED_DATE_METADATA_NAME]);
|
487 |
+
}
|
488 |
+
|
489 |
$pivotBy = Common::getRequestVar('pivotBy', false) ?: $this->requestConfig->pivotBy;
|
490 |
if (empty($pivotBy)
|
491 |
&& $this->dataTable instanceof DataTable
|
578 |
}
|
579 |
}
|
580 |
|
581 |
+
|
582 |
/**
|
583 |
* Returns prettified and translated text that describes when a report was last updated.
|
584 |
*
|
585 |
+
* @param $dateText
|
586 |
* @return string
|
587 |
+
* @throws \Exception
|
588 |
*/
|
589 |
+
private function makePrettyArchivedOnText($dateText)
|
590 |
{
|
|
|
591 |
$date = Date::factory($dateText);
|
592 |
$today = mktime(0, 0, 0);
|
593 |
$metricsFormatter = new HtmlFormatter();
|
624 |
return PrivacyManager::hasReportBeenPurged($this->dataTable);
|
625 |
}
|
626 |
|
627 |
+
/**
|
628 |
+
* Return true if the config for the plug is disabled
|
629 |
+
* @return bool
|
630 |
+
*/
|
631 |
+
|
632 |
+
private function hasReportSegmentDisabled()
|
633 |
+
{
|
634 |
+
$module = $this->requestConfig->getApiModuleToRequest();
|
635 |
+
$rawSegment = \Piwik\API\Request::getRawSegmentFromRequest();
|
636 |
+
|
637 |
+
if (!empty($rawSegment) && Rules::isSegmentPluginArchivingDisabled($module)) {
|
638 |
+
return true;
|
639 |
+
}
|
640 |
+
return false;
|
641 |
+
}
|
642 |
+
|
643 |
/**
|
644 |
* Returns array of properties that should be visible to client side JavaScript. The data
|
645 |
* will be available in the data-props HTML attribute of the .dataTable div.
|
app/core/ProfessionalServices/Advertising.php
CHANGED
@@ -93,6 +93,7 @@ class Advertising
|
|
93 |
}
|
94 |
|
95 |
/**
|
|
|
96 |
* Generates campaign URL parameters that can be used with promoting Professional Support service.
|
97 |
*
|
98 |
* @param string $campaignName
|
93 |
}
|
94 |
|
95 |
/**
|
96 |
+
* @deprecated
|
97 |
* Generates campaign URL parameters that can be used with promoting Professional Support service.
|
98 |
*
|
99 |
* @param string $campaignName
|
app/core/ReportRenderer.php
CHANGED
@@ -1,4 +1,5 @@
|
|
1 |
<?php
|
|
|
2 |
/**
|
3 |
* Matomo - free/libre analytics platform
|
4 |
*
|
@@ -6,6 +7,7 @@
|
|
6 |
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
7 |
*
|
8 |
*/
|
|
|
9 |
namespace Piwik;
|
10 |
|
11 |
use Exception;
|
@@ -40,12 +42,12 @@ abstract class ReportRenderer extends BaseFactory
|
|
40 |
|
41 |
protected $report;
|
42 |
|
43 |
-
private static $availableReportRenderers =
|
44 |
self::PDF_FORMAT,
|
45 |
self::HTML_FORMAT,
|
46 |
self::CSV_FORMAT,
|
47 |
self::TSV_FORMAT,
|
48 |
-
|
49 |
|
50 |
/**
|
51 |
* Sets the site id
|
@@ -71,7 +73,7 @@ abstract class ReportRenderer extends BaseFactory
|
|
71 |
{
|
72 |
return Piwik::translate(
|
73 |
'General_ExceptionInvalidReportRendererFormat',
|
74 |
-
|
75 |
);
|
76 |
}
|
77 |
|
@@ -155,7 +157,7 @@ abstract class ReportRenderer extends BaseFactory
|
|
155 |
protected static function makeFilenameWithExtension($filename, $extension)
|
156 |
{
|
157 |
// the filename can be used in HTTP headers, remove new lines to prevent HTTP header injection
|
158 |
-
$filename = str_replace(
|
159 |
|
160 |
return $filename . "." . $extension;
|
161 |
}
|
@@ -169,11 +171,16 @@ abstract class ReportRenderer extends BaseFactory
|
|
169 |
*/
|
170 |
protected static function getOutputPath($filename)
|
171 |
{
|
172 |
-
$
|
|
|
|
|
|
|
|
|
|
|
173 |
|
174 |
@chmod($outputFilename, 0600);
|
175 |
|
176 |
-
if(file_exists($outputFilename)){
|
177 |
@unlink($outputFilename);
|
178 |
}
|
179 |
|
@@ -236,16 +243,16 @@ abstract class ReportRenderer extends BaseFactory
|
|
236 |
}
|
237 |
}
|
238 |
|
239 |
-
$reportColumns =
|
240 |
'label' => Piwik::translate('General_Name'),
|
241 |
'value' => Piwik::translate('General_Value'),
|
242 |
-
|
243 |
}
|
244 |
|
245 |
-
return
|
246 |
$finalReport,
|
247 |
$reportColumns,
|
248 |
-
|
249 |
}
|
250 |
|
251 |
public static function getStaticGraph($reportMetadata, $width, $height, $evolution, $segment)
|
1 |
<?php
|
2 |
+
|
3 |
/**
|
4 |
* Matomo - free/libre analytics platform
|
5 |
*
|
7 |
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
8 |
*
|
9 |
*/
|
10 |
+
|
11 |
namespace Piwik;
|
12 |
|
13 |
use Exception;
|
42 |
|
43 |
protected $report;
|
44 |
|
45 |
+
private static $availableReportRenderers = [
|
46 |
self::PDF_FORMAT,
|
47 |
self::HTML_FORMAT,
|
48 |
self::CSV_FORMAT,
|
49 |
self::TSV_FORMAT,
|
50 |
+
];
|
51 |
|
52 |
/**
|
53 |
* Sets the site id
|
73 |
{
|
74 |
return Piwik::translate(
|
75 |
'General_ExceptionInvalidReportRendererFormat',
|
76 |
+
[self::normalizeRendererType($rendererType), implode(', ', self::$availableReportRenderers)]
|
77 |
);
|
78 |
}
|
79 |
|
157 |
protected static function makeFilenameWithExtension($filename, $extension)
|
158 |
{
|
159 |
// the filename can be used in HTTP headers, remove new lines to prevent HTTP header injection
|
160 |
+
$filename = str_replace(["\n", "\t"], " ", $filename);
|
161 |
|
162 |
return $filename . "." . $extension;
|
163 |
}
|
171 |
*/
|
172 |
protected static function getOutputPath($filename)
|
173 |
{
|
174 |
+
$baseAssetsDir = StaticContainer::get('path.tmp') . '/assets/';
|
175 |
+
$outputFilename = $baseAssetsDir . $filename;
|
176 |
+
|
177 |
+
if (!is_dir($baseAssetsDir)) {
|
178 |
+
Filesystem::mkdir($baseAssetsDir);
|
179 |
+
}
|
180 |
|
181 |
@chmod($outputFilename, 0600);
|
182 |
|
183 |
+
if (file_exists($outputFilename)) {
|
184 |
@unlink($outputFilename);
|
185 |
}
|
186 |
|
243 |
}
|
244 |
}
|
245 |
|
246 |
+
$reportColumns = [
|
247 |
'label' => Piwik::translate('General_Name'),
|
248 |
'value' => Piwik::translate('General_Value'),
|
249 |
+
];
|
250 |
}
|
251 |
|
252 |
+
return [
|
253 |
$finalReport,
|
254 |
$reportColumns,
|
255 |
+
];
|
256 |
}
|
257 |
|
258 |
public static function getStaticGraph($reportMetadata, $width, $height, $evolution, $segment)
|
app/core/ReportRenderer/Html.php
CHANGED
@@ -8,7 +8,6 @@
|
|
8 |
*/
|
9 |
namespace Piwik\ReportRenderer;
|
10 |
|
11 |
-
use Piwik\Mail;
|
12 |
use Piwik\Piwik;
|
13 |
use Piwik\ReportRenderer;
|
14 |
use Piwik\View;
|
8 |
*/
|
9 |
namespace Piwik\ReportRenderer;
|
10 |
|
|
|
11 |
use Piwik\Piwik;
|
12 |
use Piwik\ReportRenderer;
|
13 |
use Piwik\View;
|
app/core/ReportRenderer/Pdf.php
CHANGED
@@ -12,10 +12,10 @@ use Piwik\Common;
|
|
12 |
use Piwik\Filesystem;
|
13 |
use Piwik\NumberFormatter;
|
14 |
use Piwik\Piwik;
|
15 |
-
use Piwik\Plugins\API\API;
|
16 |
use Piwik\Plugins\CoreAdminHome\CustomLogo;
|
17 |
use Piwik\ReportRenderer;
|
18 |
use Piwik\TCPDF;
|
|
|
19 |
|
20 |
/**
|
21 |
* @see libs/tcpdf
|
@@ -40,6 +40,8 @@ class Pdf extends ReportRenderer
|
|
40 |
const MAX_GRAPH_REPORTS = 3;
|
41 |
const MAX_2COL_TABLE_REPORTS = 2;
|
42 |
|
|
|
|
|
43 |
const PDF_CONTENT_TYPE = 'pdf';
|
44 |
|
45 |
private $reportFontStyle = '';
|
@@ -136,6 +138,10 @@ class Pdf extends ReportRenderer
|
|
136 |
}
|
137 |
// WARNING: Did you read the warning above?
|
138 |
|
|
|
|
|
|
|
|
|
139 |
$this->reportFont = $reportFont;
|
140 |
}
|
141 |
|
@@ -370,7 +376,7 @@ class Pdf extends ReportRenderer
|
|
370 |
$posX = $this->TCPDF->GetX();
|
371 |
$posY = $this->TCPDF->GetY();
|
372 |
if (isset($rowMetrics[$columnId])) {
|
373 |
-
$text =
|
374 |
if ($isLogoDisplayable) {
|
375 |
$text = $leftSpacesBeforeLogo . $text;
|
376 |
}
|
12 |
use Piwik\Filesystem;
|
13 |
use Piwik\NumberFormatter;
|
14 |
use Piwik\Piwik;
|
|
|
15 |
use Piwik\Plugins\CoreAdminHome\CustomLogo;
|
16 |
use Piwik\ReportRenderer;
|
17 |
use Piwik\TCPDF;
|
18 |
+
use TCPDF_FONTS;
|
19 |
|
20 |
/**
|
21 |
* @see libs/tcpdf
|
40 |
const MAX_GRAPH_REPORTS = 3;
|
41 |
const MAX_2COL_TABLE_REPORTS = 2;
|
42 |
|
43 |
+
const IMPORT_FONT_PATH = 'plugins/ImageGraph/fonts/unifont.ttf';
|
44 |
+
|
45 |
const PDF_CONTENT_TYPE = 'pdf';
|
46 |
|
47 |
private $reportFontStyle = '';
|
138 |
}
|
139 |
// WARNING: Did you read the warning above?
|
140 |
|
141 |
+
// When user follow the FAQ https://matomo.org/faq/how-to-install/faq_142/, imported unifont font, it will apply across the entire report
|
142 |
+
if (is_file(self::IMPORT_FONT_PATH)) {
|
143 |
+
$reportFont = TCPDF_FONTS::addTTFfont(self::IMPORT_FONT_PATH, 'TrueTypeUnicode');
|
144 |
+
}
|
145 |
$this->reportFont = $reportFont;
|
146 |
}
|
147 |
|
376 |
$posX = $this->TCPDF->GetX();
|
377 |
$posY = $this->TCPDF->GetY();
|
378 |
if (isset($rowMetrics[$columnId])) {
|
379 |
+
$text = mb_substr($rowMetrics[$columnId], 0, $this->truncateAfter);
|
380 |
if ($isLogoDisplayable) {
|
381 |
$text = $leftSpacesBeforeLogo . $text;
|
382 |
}
|
app/core/Scheduler/RetryableException.php
ADDED
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace Piwik\Scheduler;
|
4 |
+
|
5 |
+
use Piwik\Exception\Exception;
|
6 |
+
|
7 |
+
class RetryableException extends Exception
|
8 |
+
{
|
9 |
+
}
|
app/core/Scheduler/Schedule/SpecificTime.php
CHANGED
@@ -30,4 +30,10 @@ class SpecificTime extends Schedule
|
|
30 |
{
|
31 |
throw new \Exception('not supported');
|
32 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
33 |
}
|
30 |
{
|
31 |
throw new \Exception('not supported');
|
32 |
}
|
33 |
+
|
34 |
+
public function setScheduledTime($scheduledTime)
|
35 |
+
{
|
36 |
+
$this->scheduledTime = $scheduledTime;
|
37 |
+
}
|
38 |
+
|
39 |
}
|
app/core/Scheduler/Scheduler.php
CHANGED
@@ -8,7 +8,6 @@
|
|
8 |
|
9 |
namespace Piwik\Scheduler;
|
10 |
|
11 |
-
use Exception;
|
12 |
use Piwik\Piwik;
|
13 |
use Piwik\Timer;
|
14 |
use Psr\Log\LoggerInterface;
|
@@ -54,6 +53,12 @@ class Scheduler
|
|
54 |
*/
|
55 |
private $isRunningTask = false;
|
56 |
|
|
|
|
|
|
|
|
|
|
|
|
|
57 |
/**
|
58 |
* @var Timetable
|
59 |
*/
|
@@ -145,8 +150,36 @@ class Scheduler
|
|
145 |
|
146 |
if ($shouldExecuteTask) {
|
147 |
$readFromOption = true;
|
|
|
148 |
$message = $this->executeTask($task);
|
149 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
150 |
$executionResults[] = array('task' => $taskName, 'output' => $message);
|
151 |
}
|
152 |
}
|
@@ -275,8 +308,15 @@ class Scheduler
|
|
275 |
$callable = array($task->getObjectInstance(), $task->getMethodName());
|
276 |
call_user_func($callable, $task->getMethodParameter());
|
277 |
$message = $timer->__toString();
|
278 |
-
} catch (Exception $e) {
|
|
|
|
|
279 |
$message = 'ERROR: ' . $e->getMessage();
|
|
|
|
|
|
|
|
|
|
|
280 |
}
|
281 |
|
282 |
$this->isRunningTask = false;
|
8 |
|
9 |
namespace Piwik\Scheduler;
|
10 |
|
|
|
11 |
use Piwik\Piwik;
|
12 |
use Piwik\Timer;
|
13 |
use Psr\Log\LoggerInterface;
|
53 |
*/
|
54 |
private $isRunningTask = false;
|
55 |
|
56 |
+
/**
|
57 |
+
* Should the last run task be scheduled for a retry
|
58 |
+
* @var bool
|
59 |
+
*/
|
60 |
+
private $scheduleRetry = false;
|
61 |
+
|
62 |
/**
|
63 |
* @var Timetable
|
64 |
*/
|
150 |
|
151 |
if ($shouldExecuteTask) {
|
152 |
$readFromOption = true;
|
153 |
+
$this->scheduleRetry = false;
|
154 |
$message = $this->executeTask($task);
|
155 |
|
156 |
+
// Task has thrown an exception and should be scheduled for a retry
|
157 |
+
if ($this->scheduleRetry) {
|
158 |
+
|
159 |
+
if($this->timetable->getRetryCount($task->getName()) == 3) {
|
160 |
+
|
161 |
+
// Task has already been retried three times, give up
|
162 |
+
$this->timetable->clearRetryCount($task->getName());
|
163 |
+
|
164 |
+
$this->logger->warning("Scheduler: '{task}' has already been retried three times, giving up",
|
165 |
+
['task' => $task->getName()]);
|
166 |
+
|
167 |
+
} else {
|
168 |
+
|
169 |
+
$readFromOption = true;
|
170 |
+
$rescheduledDate = $this->timetable->rescheduleTaskAndRunInOneHour($task);
|
171 |
+
$this->timetable->incrementRetryCount($task->getName());
|
172 |
+
|
173 |
+
$this->logger->info("Scheduler: '{task}' retry scheduled for {date}",
|
174 |
+
['task' => $task->getName(), 'date' => $rescheduledDate]);
|
175 |
+
}
|
176 |
+
$this->scheduleRetry = false;
|
177 |
+
} else {
|
178 |
+
if ($this->timetable->getRetryCount($task->getName()) > 0) {
|
179 |
+
$this->timetable->clearRetryCount($task->getName());
|
180 |
+
}
|
181 |
+
}
|
182 |
+
|
183 |
$executionResults[] = array('task' => $taskName, 'output' => $message);
|
184 |
}
|
185 |
}
|
308 |
$callable = array($task->getObjectInstance(), $task->getMethodName());
|
309 |
call_user_func($callable, $task->getMethodParameter());
|
310 |
$message = $timer->__toString();
|
311 |
+
} catch (\Exception $e) {
|
312 |
+
$this->logger->error("Scheduler: Error {errorMessage} for task '{task}'",
|
313 |
+
['errorMessage' => $e->getMessage(), 'task' => $task->getName()]);
|
314 |
$message = 'ERROR: ' . $e->getMessage();
|
315 |
+
|
316 |
+
// If the task has indicated that retrying on exception is safe then flag for rescheduling
|
317 |
+
if ($e instanceof RetryableException) {
|
318 |
+
$this->scheduleRetry = true;
|
319 |
+
}
|
320 |
}
|
321 |
|
322 |
$this->isRunningTask = false;
|
app/core/Scheduler/Timetable.php
CHANGED
@@ -19,8 +19,10 @@ use Piwik\Date;
|
|
19 |
class Timetable
|
20 |
{
|
21 |
const TIMETABLE_OPTION_STRING = "TaskScheduler.timetable";
|
|
|
22 |
|
23 |
private $timetable;
|
|
|
24 |
|
25 |
public function __construct()
|
26 |
{
|
@@ -37,6 +39,11 @@ class Timetable
|
|
37 |
$this->timetable = $timetable;
|
38 |
}
|
39 |
|
|
|
|
|
|
|
|
|
|
|
40 |
/**
|
41 |
* @param Task[] $activeTasks
|
42 |
*/
|
@@ -124,6 +131,17 @@ class Timetable
|
|
124 |
return $tomorrow;
|
125 |
}
|
126 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
127 |
public function save()
|
128 |
{
|
129 |
Option::set(self::TIMETABLE_OPTION_STRING, serialize($this->timetable));
|
@@ -149,4 +167,74 @@ class Timetable
|
|
149 |
|
150 |
$this->timetable = $unserializedTimetable === false ? array() : $unserializedTimetable;
|
151 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
152 |
}
|
19 |
class Timetable
|
20 |
{
|
21 |
const TIMETABLE_OPTION_STRING = "TaskScheduler.timetable";
|
22 |
+
const RETRY_OPTION_STRING = "TaskScheduler.retryList";
|
23 |
|
24 |
private $timetable;
|
25 |
+
private $retryList;
|
26 |
|
27 |
public function __construct()
|
28 |
{
|
39 |
$this->timetable = $timetable;
|
40 |
}
|
41 |
|
42 |
+
public function setRetryList($retryList)
|
43 |
+
{
|
44 |
+
$this->retryList = $retryList;
|
45 |
+
}
|
46 |
+
|
47 |
/**
|
48 |
* @param Task[] $activeTasks
|
49 |
*/
|
131 |
return $tomorrow;
|
132 |
}
|
133 |
|
134 |
+
public function rescheduleTaskAndRunInOneHour(Task $task)
|
135 |
+
{
|
136 |
+
$oneHourFromNow = Date::factory('now')->addHour(1);
|
137 |
+
|
138 |
+
// update the scheduled time
|
139 |
+
$this->timetable[$task->getName()] = $oneHourFromNow->getTimestamp();
|
140 |
+
$this->save();
|
141 |
+
|
142 |
+
return $oneHourFromNow;
|
143 |
+
}
|
144 |
+
|
145 |
public function save()
|
146 |
{
|
147 |
Option::set(self::TIMETABLE_OPTION_STRING, serialize($this->timetable));
|
167 |
|
168 |
$this->timetable = $unserializedTimetable === false ? array() : $unserializedTimetable;
|
169 |
}
|
170 |
+
|
171 |
+
/**
|
172 |
+
* Read the retry list option from the database
|
173 |
+
*
|
174 |
+
* @throws \Throwable
|
175 |
+
*/
|
176 |
+
private function readRetryList()
|
177 |
+
{
|
178 |
+
Option::clearCachedOption(self::RETRY_OPTION_STRING);
|
179 |
+
$retryData = Option::get(self::RETRY_OPTION_STRING);
|
180 |
+
$unserializedRetryList = Common::safe_unserialize($retryData);
|
181 |
+
|
182 |
+
$this->retryList = $unserializedRetryList === false ? array() : $unserializedRetryList;
|
183 |
+
}
|
184 |
+
|
185 |
+
/**
|
186 |
+
* Save the retry list option to the database
|
187 |
+
*/
|
188 |
+
public function saveRetryList()
|
189 |
+
{
|
190 |
+
Option::set(self::RETRY_OPTION_STRING, serialize($this->retryList));
|
191 |
+
}
|
192 |
+
|
193 |
+
/**
|
194 |
+
* Remove a task from the retry list
|
195 |
+
*
|
196 |
+
* @param string $taskName
|
197 |
+
*/
|
198 |
+
public function clearRetryCount(string $taskName)
|
199 |
+
{
|
200 |
+
if (isset($this->retryList[$taskName])) {
|
201 |
+
unset($this->retryList[$taskName]);
|
202 |
+
$this->saveRetryList();
|
203 |
+
}
|
204 |
+
}
|
205 |
+
|
206 |
+
/**
|
207 |
+
* Increment the retry counter for a task
|
208 |
+
*
|
209 |
+
* @param string $taskName
|
210 |
+
*/
|
211 |
+
public function incrementRetryCount(string $taskName)
|
212 |
+
{
|
213 |
+
$this->readRetryList();
|
214 |
+
if (!isset($this->retryList[$taskName])) {
|
215 |
+
$this->retryList[$taskName] = 0;
|
216 |
+
}
|
217 |
+
$this->retryList[$taskName]++;
|
218 |
+
$this->saveRetryList();
|
219 |
+
}
|
220 |
+
|
221 |
+
/**
|
222 |
+
* Return the current number of retries for a task
|
223 |
+
*
|
224 |
+
* @param string $taskName
|
225 |
+
*
|
226 |
+
* @return int
|
227 |
+
*/
|
228 |
+
public function getRetryCount(string $taskName) : int
|
229 |
+
{
|
230 |
+
$this->readRetryList();
|
231 |
+
|
232 |
+
// Ignore excessive retry counts, workaround for SchedulerTest mock
|
233 |
+
if (!isset($this->retryList[$taskName]) || $this->retryList[$taskName] > 10000) {
|
234 |
+
return 0;
|
235 |
+
}
|
236 |
+
|
237 |
+
return $this->retryList[$taskName];
|
238 |
+
}
|
239 |
+
|
240 |
}
|
app/core/Segment.php
CHANGED
@@ -11,12 +11,12 @@ namespace Piwik;
|
|
11 |
use Exception;
|
12 |
use Piwik\API\Request;
|
13 |
use Piwik\ArchiveProcessor\Rules;
|
|
|
14 |
use Piwik\Container\StaticContainer;
|
15 |
use Piwik\DataAccess\LogQueryBuilder;
|
16 |
use Piwik\Plugins\SegmentEditor\SegmentEditor;
|
17 |
use Piwik\Segment\SegmentExpression;
|
18 |
use Piwik\Plugins\SegmentEditor\Model as SegmentEditorModel;
|
19 |
-
use Piwik\Cache;
|
20 |
|
21 |
/**
|
22 |
* Limits the set of visits Piwik uses when aggregating analytics data.
|
@@ -180,17 +180,30 @@ class Segment
|
|
180 |
return $this->segmentExpression;
|
181 |
}
|
182 |
|
|
|
|
|
|
|
183 |
private function getAvailableSegments()
|
184 |
{
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
185 |
// segment metadata
|
186 |
if (empty($this->availableSegments)) {
|
|
|
187 |
$this->availableSegments = Request::processRequest('API.getSegmentsMetadata', array(
|
188 |
-
|
189 |
-
|
190 |
-
|
191 |
-
|
192 |
-
|
193 |
), []);
|
|
|
194 |
}
|
195 |
|
196 |
return $this->availableSegments;
|
11 |
use Exception;
|
12 |
use Piwik\API\Request;
|
13 |
use Piwik\ArchiveProcessor\Rules;
|
14 |
+
use Piwik\Cache as PiwikCache;
|
15 |
use Piwik\Container\StaticContainer;
|
16 |
use Piwik\DataAccess\LogQueryBuilder;
|
17 |
use Piwik\Plugins\SegmentEditor\SegmentEditor;
|
18 |
use Piwik\Segment\SegmentExpression;
|
19 |
use Piwik\Plugins\SegmentEditor\Model as SegmentEditorModel;
|
|
|
20 |
|
21 |
/**
|
22 |
* Limits the set of visits Piwik uses when aggregating analytics data.
|
180 |
return $this->segmentExpression;
|
181 |
}
|
182 |
|
183 |
+
/**
|
184 |
+
* @throws Exception
|
185 |
+
*/
|
186 |
private function getAvailableSegments()
|
187 |
{
|
188 |
+
// start cache
|
189 |
+
$cache = PiwikCache::getTransientCache();
|
190 |
+
|
191 |
+
//covert cache id
|
192 |
+
$cacheId = 'API.getSegmentsMetadata.'.SettingsPiwik::getPiwikInstanceId() . '.' . implode(",", $this->idSites);
|
193 |
+
|
194 |
+
//fetch cache lockId
|
195 |
+
$this->availableSegments = $cache->fetch($cacheId);
|
196 |
// segment metadata
|
197 |
if (empty($this->availableSegments)) {
|
198 |
+
|
199 |
$this->availableSegments = Request::processRequest('API.getSegmentsMetadata', array(
|
200 |
+
'idSites' => $this->idSites,
|
201 |
+
'_hideImplementationData' => 0,
|
202 |
+
'filter_limit' => -1,
|
203 |
+
'filter_offset' => 0,
|
204 |
+
'_showAllSegments' => 1,
|
205 |
), []);
|
206 |
+
$cache->save($cacheId, $this->availableSegments);
|
207 |
}
|
208 |
|
209 |
return $this->availableSegments;
|
app/core/Segment/SegmentsList.php
CHANGED
@@ -132,6 +132,20 @@ class SegmentsList
|
|
132 |
$dimension->configureSegments($list, new DimensionSegmentFactory($dimension));
|
133 |
}
|
134 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
135 |
$cache->save($cacheKey, $list);
|
136 |
|
137 |
return $list;
|
132 |
$dimension->configureSegments($list, new DimensionSegmentFactory($dimension));
|
133 |
}
|
134 |
|
135 |
+
/**
|
136 |
+
* Triggered to filter segment definitions.
|
137 |
+
*
|
138 |
+
* **Example**
|
139 |
+
*
|
140 |
+
* public function filterSegments(&$segmentList)
|
141 |
+
* {
|
142 |
+
* $segmentList->remove('Category');
|
143 |
+
* }
|
144 |
+
*
|
145 |
+
* @param SegmentsList $list An instance of the SegmentsList.
|
146 |
+
*/
|
147 |
+
Piwik::postEvent('Segment.filterSegments', array($list));
|
148 |
+
|
149 |
$cache->save($cacheKey, $list);
|
150 |
|
151 |
return $list;
|
app/core/Session.php
CHANGED
@@ -11,6 +11,7 @@ namespace Piwik;
|
|
11 |
use Exception;
|
12 |
use Piwik\Container\StaticContainer;
|
13 |
use Piwik\Exception\MissingFilePermissionException;
|
|
|
14 |
use Piwik\Session\SaveHandler\DbTable;
|
15 |
use Psr\Log\LoggerInterface;
|
16 |
use Zend_Session;
|
@@ -170,10 +171,11 @@ class Session extends Zend_Session
|
|
170 |
|
171 |
$module = Piwik::getModule();
|
172 |
$action = Piwik::getAction();
|
|
|
|
|
173 |
|
174 |
$isOptOutRequest = $module == 'CoreAdminHome' && $action == 'optOut';
|
175 |
-
$
|
176 |
-
$shouldUseNone = !empty($general['enable_framed_pages']) || $isOptOutRequest || $isOverlay;
|
177 |
|
178 |
if ($shouldUseNone && ProxyHttp::isHttps()) {
|
179 |
return 'None';
|
11 |
use Exception;
|
12 |
use Piwik\Container\StaticContainer;
|
13 |
use Piwik\Exception\MissingFilePermissionException;
|
14 |
+
use Piwik\Plugins\Overlay\Overlay;
|
15 |
use Piwik\Session\SaveHandler\DbTable;
|
16 |
use Psr\Log\LoggerInterface;
|
17 |
use Zend_Session;
|
171 |
|
172 |
$module = Piwik::getModule();
|
173 |
$action = Piwik::getAction();
|
174 |
+
$method = Common::getRequestVar('method', '', 'string');
|
175 |
+
$referer = Url::getReferrer();
|
176 |
|
177 |
$isOptOutRequest = $module == 'CoreAdminHome' && $action == 'optOut';
|
178 |
+
$shouldUseNone = !empty($general['enable_framed_pages']) || $isOptOutRequest || Overlay::isOverlayRequest($module, $action, $method, $referer);
|
|
|
179 |
|
180 |
if ($shouldUseNone && ProxyHttp::isHttps()) {
|
181 |
return 'None';
|
app/core/Session/SessionAuth.php
CHANGED
@@ -11,11 +11,9 @@ namespace Piwik\Session;
|
|
11 |
|
12 |
use Piwik\Auth;
|
13 |
use Piwik\AuthResult;
|
14 |
-
use Piwik\Common;
|
15 |
use Piwik\Config;
|
16 |
use Piwik\Container\StaticContainer;
|
17 |
use Piwik\Date;
|
18 |
-
use Piwik\Plugins\UsersManager\Model;
|
19 |
use Piwik\Plugins\UsersManager\Model as UsersModel;
|
20 |
use Piwik\Session;
|
21 |
use Psr\Log\LoggerInterface;
|
11 |
|
12 |
use Piwik\Auth;
|
13 |
use Piwik\AuthResult;
|
|
|
14 |
use Piwik\Config;
|
15 |
use Piwik\Container\StaticContainer;
|
16 |
use Piwik\Date;
|
|
|
17 |
use Piwik\Plugins\UsersManager\Model as UsersModel;
|
18 |
use Piwik\Session;
|
19 |
use Psr\Log\LoggerInterface;
|
app/core/Session/SessionFingerprint.php
CHANGED
@@ -9,7 +9,6 @@
|
|
9 |
|
10 |
namespace Piwik\Session;
|
11 |
|
12 |
-
use Piwik\Common;
|
13 |
use Piwik\Config;
|
14 |
use Piwik\Date;
|
15 |
|
9 |
|
10 |
namespace Piwik\Session;
|
11 |
|
|
|
12 |
use Piwik\Config;
|
13 |
use Piwik\Date;
|
14 |
|
app/core/Settings/FieldConfig.php
CHANGED
@@ -123,9 +123,21 @@ class FieldConfig
|
|
123 |
* "formField.value" angular model. For an example see "plugins/CorePluginsAdmin/angularjs/form-field/field-text.html"
|
124 |
*
|
125 |
* @var string
|
|
|
126 |
*/
|
127 |
public $customUiControlTemplateFile = '';
|
128 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
129 |
/**
|
130 |
* Name-value mapping of HTML attributes that will be added HTML form control, eg,
|
131 |
* `array('size' => 3)`. Attributes will be escaped before outputting.
|
123 |
* "formField.value" angular model. For an example see "plugins/CorePluginsAdmin/angularjs/form-field/field-text.html"
|
124 |
*
|
125 |
* @var string
|
126 |
+
* @deprecated set $customFieldComponent to ['plugin' => 'MyPlugin', 'component' => 'MyComponentAsItIsExported']
|
127 |
*/
|
128 |
public $customUiControlTemplateFile = '';
|
129 |
|
130 |
+
/**
|
131 |
+
* Defines a custom Vue component to use for the internal field UI control. This should be an array with two
|
132 |
+
* keys:
|
133 |
+
*
|
134 |
+
* - plugin: the name of the plugin that the UI control exists in.
|
135 |
+
* - name: the name of the export for the component in the plugin's Vue UMD module.
|
136 |
+
*
|
137 |
+
* @var string[]
|
138 |
+
*/
|
139 |
+
public $customFieldComponent;
|
140 |
+
|
141 |
/**
|
142 |
* Name-value mapping of HTML attributes that will be added HTML form control, eg,
|
143 |
* `array('size' => 3)`. Attributes will be escaped before outputting.
|
app/core/Settings/FieldConfig/ArrayField.php
CHANGED
@@ -39,6 +39,14 @@ class ArrayField
|
|
39 |
*/
|
40 |
public $customUiControlTemplateFile = '';
|
41 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
42 |
/**
|
43 |
* This setting's display name, for example, `'Refresh Interval'`.
|
44 |
*
|
@@ -72,6 +80,7 @@ class ArrayField
|
|
72 |
'title' => $this->title,
|
73 |
'uiControl' => $this->uiControl,
|
74 |
'templateFile' => $this->customUiControlTemplateFile,
|
|
|
75 |
'availableValues' => $this->availableValues,
|
76 |
);
|
77 |
}
|
39 |
*/
|
40 |
public $customUiControlTemplateFile = '';
|
41 |
|
42 |
+
/**
|
43 |
+
* Array like ['plugin' => 'MyPlugin', 'component' => 'MyExportedCustomFieldComponent']. For an example see
|
44 |
+
* "plugins/CorePluginsAdmin/vue/src/FormField/FieldText.vue"
|
45 |
+
*
|
46 |
+
* @var string[]
|
47 |
+
*/
|
48 |
+
public $customFieldComponent = null;
|
49 |
+
|
50 |
/**
|
51 |
* This setting's display name, for example, `'Refresh Interval'`.
|
52 |
*
|
80 |
'title' => $this->title,
|
81 |
'uiControl' => $this->uiControl,
|
82 |
'templateFile' => $this->customUiControlTemplateFile,
|
83 |
+
'component' => $this->customFieldComponent,
|
84 |
'availableValues' => $this->availableValues,
|
85 |
);
|
86 |
}
|
app/core/Settings/FieldConfig/MultiPair.php
CHANGED
@@ -44,9 +44,18 @@ class MultiPair
|
|
44 |
* "formField.value" angular model. For an example see "plugins/CorePluginsAdmin/angularjs/form-field/field-text.html"
|
45 |
*
|
46 |
* @var string
|
|
|
47 |
*/
|
48 |
public $customUiControlTemplateFile = '';
|
49 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
50 |
/**
|
51 |
* This setting's display name, for example, `'Refresh Interval'`.
|
52 |
*
|
@@ -82,6 +91,7 @@ class MultiPair
|
|
82 |
'title' => $this->title,
|
83 |
'uiControl' => $this->uiControl,
|
84 |
'templateFile' => $this->customUiControlTemplateFile,
|
|
|
85 |
'availableValues' => $this->availableValues,
|
86 |
);
|
87 |
}
|
44 |
* "formField.value" angular model. For an example see "plugins/CorePluginsAdmin/angularjs/form-field/field-text.html"
|
45 |
*
|
46 |
* @var string
|
47 |
+
* @deprecated use customFieldComponent instead
|
48 |
*/
|
49 |
public $customUiControlTemplateFile = '';
|
50 |
|
51 |
+
/**
|
52 |
+
* Array like ['plugin' => 'MyPlugin', 'component' => 'MyExportedCustomFieldComponent']. For an example see
|
53 |
+
* "plugins/CorePluginsAdmin/vue/src/FormField/FieldText.vue"
|
54 |
+
*
|
55 |
+
* @var string[]
|
56 |
+
*/
|
57 |
+
public $customFieldComponent = null;
|
58 |
+
|
59 |
/**
|
60 |
* This setting's display name, for example, `'Refresh Interval'`.
|
61 |
*
|
91 |
'title' => $this->title,
|
92 |
'uiControl' => $this->uiControl,
|
93 |
'templateFile' => $this->customUiControlTemplateFile,
|
94 |
+
'component' => $this->customFieldComponent,
|
95 |
'availableValues' => $this->availableValues,
|
96 |
);
|
97 |
}
|
app/core/SettingsPiwik.php
CHANGED
@@ -31,7 +31,7 @@ class SettingsPiwik
|
|
31 |
{
|
32 |
static $salt = null;
|
33 |
if (is_null($salt)) {
|
34 |
-
$salt =
|
35 |
}
|
36 |
return $salt;
|
37 |
}
|
31 |
{
|
32 |
static $salt = null;
|
33 |
if (is_null($salt)) {
|
34 |
+
$salt = Config::getInstance()->General['salt'] ?? '';
|
35 |
}
|
36 |
return $salt;
|
37 |
}
|
app/core/SupportedBrowser.php
CHANGED
@@ -9,7 +9,6 @@
|
|
9 |
|
10 |
namespace Piwik;
|
11 |
|
12 |
-
use Piwik\Http;
|
13 |
use Piwik\Piwik;
|
14 |
use Piwik\Container\StaticContainer;
|
15 |
use Piwik\DeviceDetector\DeviceDetectorFactory;
|
9 |
|
10 |
namespace Piwik;
|
11 |
|
|
|
12 |
use Piwik\Piwik;
|
13 |
use Piwik\Container\StaticContainer;
|
14 |
use Piwik\DeviceDetector\DeviceDetectorFactory;
|
app/core/Tracker.php
CHANGED
@@ -1,4 +1,5 @@
|
|
1 |
<?php
|
|
|
2 |
/**
|
3 |
* Matomo - free/libre analytics platform
|
4 |
*
|
@@ -6,6 +7,7 @@
|
|
6 |
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
7 |
*
|
8 |
*/
|
|
|
9 |
namespace Piwik;
|
10 |
|
11 |
use Exception;
|
@@ -110,11 +112,21 @@ class Tracker
|
|
110 |
{
|
111 |
try {
|
112 |
$this->init();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
113 |
$handler->init($this, $requestSet);
|
114 |
|
115 |
$this->track($handler, $requestSet);
|
116 |
} catch (Exception $e) {
|
117 |
-
|
118 |
|
119 |
$handler->onException($this, $requestSet, $e);
|
120 |
}
|
@@ -171,7 +183,8 @@ class Tracker
|
|
171 |
*/
|
172 |
public static function initCorePiwikInTrackerMode()
|
173 |
{
|
174 |
-
if (
|
|
|
175 |
&& self::$initTrackerMode === false
|
176 |
) {
|
177 |
self::$initTrackerMode = true;
|
@@ -291,7 +304,8 @@ class Tracker
|
|
291 |
}
|
292 |
|
293 |
// Tests using window_look_back_for_visitor
|
294 |
-
if (
|
|
|
295 |
// also look for this in bulk requests (see fake_logs_replay.log)
|
296 |
|| strpos(json_encode($args, true), '"forceLargeWindowLookBackForVisitor":"1"') !== false
|
297 |
) {
|
@@ -330,7 +344,8 @@ class Tracker
|
|
330 |
|
331 |
private function handleFatalErrors()
|
332 |
{
|
333 |
-
register_shutdown_function(function () {
|
|
|
334 |
$lastError = error_get_last();
|
335 |
if (!empty($lastError) && $lastError['type'] == E_ERROR) {
|
336 |
Common::sendResponseCode(500);
|
@@ -355,4 +370,12 @@ class Tracker
|
|
355 |
|
356 |
return false;
|
357 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
358 |
}
|
1 |
<?php
|
2 |
+
|
3 |
/**
|
4 |
* Matomo - free/libre analytics platform
|
5 |
*
|
7 |
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
8 |
*
|
9 |
*/
|
10 |
+
|
11 |
namespace Piwik;
|
12 |
|
13 |
use Exception;
|
112 |
{
|
113 |
try {
|
114 |
$this->init();
|
115 |
+
|
116 |
+
if ($this->isPreFlightCorsRequest()) {
|
117 |
+
Common::sendHeader('Access-Control-Allow-Methods: GET, POST');
|
118 |
+
Common::sendHeader('Access-Control-Allow-Headers: *');
|
119 |
+
Common::sendHeader('Access-Control-Allow-Origin: *');
|
120 |
+
Common::sendResponseCode(204);
|
121 |
+
$this->logger->debug("Tracker detected preflight CORS request. Skipping...");
|
122 |
+
return null;
|
123 |
+
}
|
124 |
+
|
125 |
$handler->init($this, $requestSet);
|
126 |
|
127 |
$this->track($handler, $requestSet);
|
128 |
} catch (Exception $e) {
|
129 |
+
$this->logger->debug("Tracker encountered an exception: {ex}", [$e]);
|
130 |
|
131 |
$handler->onException($this, $requestSet, $e);
|
132 |
}
|
183 |
*/
|
184 |
public static function initCorePiwikInTrackerMode()
|
185 |
{
|
186 |
+
if (
|
187 |
+
SettingsServer::isTrackerApiRequest()
|
188 |
&& self::$initTrackerMode === false
|
189 |
) {
|
190 |
self::$initTrackerMode = true;
|
304 |
}
|
305 |
|
306 |
// Tests using window_look_back_for_visitor
|
307 |
+
if (
|
308 |
+
Common::getRequestVar('forceLargeWindowLookBackForVisitor', false, null, $args) == 1
|
309 |
// also look for this in bulk requests (see fake_logs_replay.log)
|
310 |
|| strpos(json_encode($args, true), '"forceLargeWindowLookBackForVisitor":"1"') !== false
|
311 |
) {
|
344 |
|
345 |
private function handleFatalErrors()
|
346 |
{
|
347 |
+
register_shutdown_function(function () {
|
348 |
+
// TODO: add a log here
|
349 |
$lastError = error_get_last();
|
350 |
if (!empty($lastError) && $lastError['type'] == E_ERROR) {
|
351 |
Common::sendResponseCode(500);
|
370 |
|
371 |
return false;
|
372 |
}
|
373 |
+
|
374 |
+
public function isPreFlightCorsRequest(): bool
|
375 |
+
{
|
376 |
+
if (isset($_SERVER['REQUEST_METHOD']) && strtoupper($_SERVER['REQUEST_METHOD']) === 'OPTIONS') {
|
377 |
+
return !empty($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']) || !empty($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD']);
|
378 |
+
}
|
379 |
+
return false;
|
380 |
+
}
|
381 |
}
|
app/core/Tracker/Action.php
CHANGED
@@ -381,6 +381,8 @@ abstract class Action
|
|
381 |
*/
|
382 |
public function record(Visitor $visitor, $idReferrerActionUrl, $idReferrerActionName)
|
383 |
{
|
|
|
|
|
384 |
$this->loadIdsFromLogActionTable();
|
385 |
|
386 |
$visitAction = array(
|
381 |
*/
|
382 |
public function record(Visitor $visitor, $idReferrerActionUrl, $idReferrerActionName)
|
383 |
{
|
384 |
+
|
385 |
+
|
386 |
$this->loadIdsFromLogActionTable();
|
387 |
|
388 |
$visitAction = array(
|
app/core/Tracker/Cache.php
CHANGED
@@ -17,7 +17,6 @@ use Piwik\Option;
|
|
17 |
use Piwik\Piwik;
|
18 |
use Piwik\Tracker;
|
19 |
use Psr\Log\LoggerInterface;
|
20 |
-
use function DI\object;
|
21 |
|
22 |
/**
|
23 |
* Simple cache mechanism used in Tracker to avoid requesting settings from mysql on every request
|
17 |
use Piwik\Piwik;
|
18 |
use Piwik\Tracker;
|
19 |
use Psr\Log\LoggerInterface;
|
|
|
20 |
|
21 |
/**
|
22 |
* Simple cache mechanism used in Tracker to avoid requesting settings from mysql on every request
|
app/core/Tracker/Db.php
CHANGED
@@ -30,6 +30,9 @@ abstract class Db
|
|
30 |
|
31 |
protected $connection = null;
|
32 |
|
|
|
|
|
|
|
33 |
/**
|
34 |
* Enables the SQL profiling.
|
35 |
* For each query, saves in the DB the time spent on this query.
|
30 |
|
31 |
protected $connection = null;
|
32 |
|
33 |
+
// this is used for indicate TransactionLevel Cache
|
34 |
+
public $supportsUncommitted = null;
|
35 |
+
|
36 |
/**
|
37 |
* Enables the SQL profiling.
|
38 |
* For each query, saves in the DB the time spent on this query.
|
app/core/Tracker/Db/Pdo/Mysql.php
CHANGED
@@ -12,7 +12,6 @@ use Exception;
|
|
12 |
use PDO;
|
13 |
use PDOException;
|
14 |
use PDOStatement;
|
15 |
-
use Piwik\Config;
|
16 |
use Piwik\Tracker\Db;
|
17 |
use Piwik\Tracker\Db\DbException;
|
18 |
|
12 |
use PDO;
|
13 |
use PDOException;
|
14 |
use PDOStatement;
|
|
|
15 |
use Piwik\Tracker\Db;
|
16 |
use Piwik\Tracker\Db\DbException;
|
17 |
|
app/core/Tracker/FingerprintSalt.php
CHANGED
@@ -11,13 +11,7 @@ namespace Piwik\Tracker;
|
|
11 |
|
12 |
use Piwik\Common;
|
13 |
use Piwik\Date;
|
14 |
-
use Piwik\Exception\InvalidRequestParameterException;
|
15 |
-
use Piwik\Exception\UnexpectedWebsiteFoundException;
|
16 |
use Piwik\Option;
|
17 |
-
use Piwik\Piwik;
|
18 |
-
use Piwik\SettingsServer;
|
19 |
-
use Piwik\Site;
|
20 |
-
use Piwik\Db as PiwikDb;
|
21 |
|
22 |
class FingerprintSalt
|
23 |
{
|
11 |
|
12 |
use Piwik\Common;
|
13 |
use Piwik\Date;
|
|
|
|
|
14 |
use Piwik\Option;
|
|
|
|
|
|
|
|
|
15 |
|
16 |
class FingerprintSalt
|
17 |
{
|
app/core/Tracker/GoalManager.php
CHANGED
@@ -19,7 +19,6 @@ use Piwik\Plugin\Dimension\VisitDimension;
|
|
19 |
use Piwik\Plugin\Manager;
|
20 |
use Piwik\Plugins\CustomVariables\CustomVariables;
|
21 |
use Piwik\Plugins\Events\Actions\ActionEvent;
|
22 |
-
use Piwik\Tracker;
|
23 |
use Piwik\Tracker\Visit\VisitProperties;
|
24 |
|
25 |
/**
|
@@ -561,8 +560,10 @@ class GoalManager
|
|
561 |
|
562 |
foreach ($cleanedItems as $item) {
|
563 |
$actionsToLookup = array();
|
564 |
-
list($
|
|
|
565 |
$actionsToLookup[] = array(trim($sku), Action::TYPE_ECOMMERCE_ITEM_SKU);
|
|
|
566 |
$actionsToLookup[] = array(trim($name), Action::TYPE_ECOMMERCE_ITEM_NAME);
|
567 |
|
568 |
// Only one category
|
19 |
use Piwik\Plugin\Manager;
|
20 |
use Piwik\Plugins\CustomVariables\CustomVariables;
|
21 |
use Piwik\Plugins\Events\Actions\ActionEvent;
|
|
|
22 |
use Piwik\Tracker\Visit\VisitProperties;
|
23 |
|
24 |
/**
|
560 |
|
561 |
foreach ($cleanedItems as $item) {
|
562 |
$actionsToLookup = array();
|
563 |
+
list($sku_check, $name_check, $category, $price, $quantity) = $item;
|
564 |
+
$sku = is_array($sku_check) ? join(',', $sku_check) : $sku_check;
|
565 |
$actionsToLookup[] = array(trim($sku), Action::TYPE_ECOMMERCE_ITEM_SKU);
|
566 |
+
$name = is_array($name_check) ? join(',', $name_check) : $name_check;
|
567 |
$actionsToLookup[] = array(trim($name), Action::TYPE_ECOMMERCE_ITEM_NAME);
|
568 |
|
569 |
// Only one category
|
app/core/Tracker/PageUrl.php
CHANGED
@@ -287,8 +287,8 @@ class PageUrl
|
|
287 |
if (function_exists('mb_check_encoding')) {
|
288 |
// if query params are encoded w/ non-utf8 characters (due to browser bug or whatever),
|
289 |
// encode to UTF-8.
|
290 |
-
if (
|
291 |
-
|
292 |
) {
|
293 |
Common::printDebug("Encoding page URL query parameters to $encoding.");
|
294 |
|
287 |
if (function_exists('mb_check_encoding')) {
|
288 |
// if query params are encoded w/ non-utf8 characters (due to browser bug or whatever),
|
289 |
// encode to UTF-8.
|
290 |
+
if (is_string($encoding) &&
|
291 |
+
strtolower($encoding) !== 'utf-8'
|
292 |
) {
|
293 |
Common::printDebug("Encoding page URL query parameters to $encoding.");
|
294 |
|
app/core/Tracker/Request.php
CHANGED
@@ -10,7 +10,6 @@ namespace Piwik\Tracker;
|
|
10 |
|
11 |
use Exception;
|
12 |
use Piwik\Common;
|
13 |
-
use Piwik\Config;
|
14 |
use Piwik\Container\StaticContainer;
|
15 |
use Piwik\Cookie;
|
16 |
use Piwik\Exception\InvalidRequestParameterException;
|
@@ -18,7 +17,6 @@ use Piwik\Exception\UnexpectedWebsiteFoundException;
|
|
18 |
use Piwik\IP;
|
19 |
use Matomo\Network\IPUtils;
|
20 |
use Piwik\Piwik;
|
21 |
-
use Piwik\Plugins\PrivacyManager\PrivacyManager;
|
22 |
use Piwik\Plugins\UsersManager\UsersManager;
|
23 |
use Piwik\ProxyHttp;
|
24 |
use Piwik\Segment\SegmentExpression;
|
@@ -46,6 +44,8 @@ class Request
|
|
46 |
|
47 |
protected $tokenAuth;
|
48 |
|
|
|
|
|
49 |
/**
|
50 |
* Stores plugin specific tracking request metadata. RequestProcessors can store
|
51 |
* whatever they want in this array, and other RequestProcessors can modify these
|
@@ -74,6 +74,7 @@ class Request
|
|
74 |
$this->timestamp = time();
|
75 |
$this->isEmptyRequest = empty($params);
|
76 |
|
|
|
77 |
// When the 'url' and referrer url parameter are not given, we might be in the 'Simple Image Tracker' mode.
|
78 |
// The URL can default to the Referrer, which will be in this case
|
79 |
// the URL of the page containing the Simple Image beacon
|
@@ -923,4 +924,5 @@ class Request
|
|
923 |
}
|
924 |
return false;
|
925 |
}
|
|
|
926 |
}
|
10 |
|
11 |
use Exception;
|
12 |
use Piwik\Common;
|
|
|
13 |
use Piwik\Container\StaticContainer;
|
14 |
use Piwik\Cookie;
|
15 |
use Piwik\Exception\InvalidRequestParameterException;
|
17 |
use Piwik\IP;
|
18 |
use Matomo\Network\IPUtils;
|
19 |
use Piwik\Piwik;
|
|
|
20 |
use Piwik\Plugins\UsersManager\UsersManager;
|
21 |
use Piwik\ProxyHttp;
|
22 |
use Piwik\Segment\SegmentExpression;
|
44 |
|
45 |
protected $tokenAuth;
|
46 |
|
47 |
+
|
48 |
+
|
49 |
/**
|
50 |
* Stores plugin specific tracking request metadata. RequestProcessors can store
|
51 |
* whatever they want in this array, and other RequestProcessors can modify these
|
74 |
$this->timestamp = time();
|
75 |
$this->isEmptyRequest = empty($params);
|
76 |
|
77 |
+
|
78 |
// When the 'url' and referrer url parameter are not given, we might be in the 'Simple Image Tracker' mode.
|
79 |
// The URL can default to the Referrer, which will be in this case
|
80 |
// the URL of the page containing the Simple Image beacon
|
924 |
}
|
925 |
return false;
|
926 |
}
|
927 |
+
|
928 |
}
|
app/core/Tracker/RequestSet.php
CHANGED
@@ -36,7 +36,7 @@ class RequestSet
|
|
36 |
if (empty($requests)|| !is_array($requests)) {
|
37 |
return;
|
38 |
}
|
39 |
-
|
40 |
foreach ($requests as $request) {
|
41 |
if (empty($request) && !is_array($request)) {
|
42 |
continue;
|
@@ -45,7 +45,6 @@ class RequestSet
|
|
45 |
if (!$request instanceof Request) {
|
46 |
$request = new Request($request, $this->getTokenAuth());
|
47 |
}
|
48 |
-
|
49 |
$this->requests[] = $request;
|
50 |
}
|
51 |
}
|
36 |
if (empty($requests)|| !is_array($requests)) {
|
37 |
return;
|
38 |
}
|
39 |
+
|
40 |
foreach ($requests as $request) {
|
41 |
if (empty($request) && !is_array($request)) {
|
42 |
continue;
|
45 |
if (!$request instanceof Request) {
|
46 |
$request = new Request($request, $this->getTokenAuth());
|
47 |
}
|
|
|
48 |
$this->requests[] = $request;
|
49 |
}
|
50 |
}
|
app/core/Tracker/Response.php
CHANGED
@@ -1,4 +1,5 @@
|
|
1 |
<?php
|
|
|
2 |
/**
|
3 |
* Matomo - free/libre analytics platform
|
4 |
*
|
@@ -6,6 +7,7 @@
|
|
6 |
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
7 |
*
|
8 |
*/
|
|
|
9 |
namespace Piwik\Tracker;
|
10 |
|
11 |
use Exception;
|
@@ -15,6 +17,7 @@ use Piwik\Profiler;
|
|
15 |
use Piwik\Timer;
|
16 |
use Piwik\Tracker;
|
17 |
use Piwik\Tracker\Db as TrackerDb;
|
|
|
18 |
|
19 |
class Response
|
20 |
{
|
@@ -89,7 +92,8 @@ class Response
|
|
89 |
|
90 |
Common::printDebug("End of the page.");
|
91 |
|
92 |
-
if (
|
|
|
93 |
&& $tracker->isDatabaseConnected()
|
94 |
&& TrackerDb::isProfilingEnabled()
|
95 |
) {
|
@@ -190,7 +194,7 @@ class Response
|
|
190 |
// Base64 image string
|
191 |
$img = base64_decode($customImage);
|
192 |
$size = getimagesizefromstring($img);
|
193 |
-
}
|
194 |
// Image file
|
195 |
$img = file_get_contents($customImage);
|
196 |
$size = getimagesize($customImage); // imagesize is used to get the mime type
|
@@ -198,7 +202,7 @@ class Response
|
|
198 |
|
199 |
// Must have valid image data and a valid mime type to proceed
|
200 |
if ($img && $size && isset($size['mime']) && in_array($size['mime'], $supportedMimeTypes)) {
|
201 |
-
Common::sendHeader('Content-Type: '
|
202 |
echo $img;
|
203 |
return true;
|
204 |
}
|
@@ -229,6 +233,8 @@ class Response
|
|
229 |
|
230 |
protected function logExceptionToErrorLog($e)
|
231 |
{
|
232 |
-
|
|
|
|
|
233 |
}
|
234 |
}
|
1 |
<?php
|
2 |
+
|
3 |
/**
|
4 |
* Matomo - free/libre analytics platform
|
5 |
*
|
7 |
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
8 |
*
|
9 |
*/
|
10 |
+
|
11 |
namespace Piwik\Tracker;
|
12 |
|
13 |
use Exception;
|
17 |
use Piwik\Timer;
|
18 |
use Piwik\Tracker;
|
19 |
use Piwik\Tracker\Db as TrackerDb;
|
20 |
+
use Piwik\Url;
|
21 |
|
22 |
class Response
|
23 |
{
|
92 |
|
93 |
Common::printDebug("End of the page.");
|
94 |
|
95 |
+
if (
|
96 |
+
$tracker->isDebugModeEnabled()
|
97 |
&& $tracker->isDatabaseConnected()
|
98 |
&& TrackerDb::isProfilingEnabled()
|
99 |
) {
|
194 |
// Base64 image string
|
195 |
$img = base64_decode($customImage);
|
196 |
$size = getimagesizefromstring($img);
|
197 |
+
} elseif (is_file($customImage) && is_readable($customImage)) {
|
198 |
// Image file
|
199 |
$img = file_get_contents($customImage);
|
200 |
$size = getimagesize($customImage); // imagesize is used to get the mime type
|
202 |
|
203 |
// Must have valid image data and a valid mime type to proceed
|
204 |
if ($img && $size && isset($size['mime']) && in_array($size['mime'], $supportedMimeTypes)) {
|
205 |
+
Common::sendHeader('Content-Type: ' . $size['mime']);
|
206 |
echo $img;
|
207 |
return true;
|
208 |
}
|
233 |
|
234 |
protected function logExceptionToErrorLog($e)
|
235 |
{
|
236 |
+
$hostname = Url::getRFCValidHostname();
|
237 |
+
$hostStr = $hostname ? "[$hostname]" : '-';
|
238 |
+
error_log(sprintf("$hostStr Error in Matomo (tracker): %s", str_replace("\n", " ", $this->getMessageFromException($e))));
|
239 |
}
|
240 |
}
|
app/core/Twig.php
CHANGED
@@ -42,26 +42,7 @@ function piwik_format_number($string, $minFractionDigits, $maxFractionDigits)
|
|
42 |
|
43 |
function piwik_fix_lbrace($string)
|
44 |
{
|
45 |
-
|
46 |
-
|
47 |
-
static $search;
|
48 |
-
static $replace;
|
49 |
-
|
50 |
-
if (!isset($search)) {
|
51 |
-
$search = array_map(function ($val) { return $val . $val; }, $chars);
|
52 |
-
}
|
53 |
-
if (!isset($replace)) {
|
54 |
-
$replace = array_map(function ($val) { return $val . '⁣' . $val; }, $chars);
|
55 |
-
}
|
56 |
-
|
57 |
-
$replacedString = is_null($string) ? $string : str_replace($search, $replace, $string);
|
58 |
-
|
59 |
-
// try to replace characters until there are no changes
|
60 |
-
if ($string !== $replacedString) {
|
61 |
-
return piwik_fix_lbrace($replacedString);
|
62 |
-
}
|
63 |
-
|
64 |
-
return $string;
|
65 |
}
|
66 |
|
67 |
function piwik_escape_filter(Environment $env, $string, $strategy = 'html', $charset = null, $autoescape = false) {
|
@@ -153,13 +134,13 @@ class Twig
|
|
153 |
$chainLoader = new ChainLoader($loaders);
|
154 |
|
155 |
// Create new Twig Environment and set cache dir
|
156 |
-
$
|
157 |
|
158 |
$this->twig = new Environment($chainLoader,
|
159 |
array(
|
160 |
'debug' => true, // to use {{ dump(var) }} in twig templates
|
161 |
'strict_variables' => true, // throw an exception if variables are invalid
|
162 |
-
'cache' => $
|
163 |
)
|
164 |
);
|
165 |
$this->twig->addExtension(new DebugExtension());
|
@@ -185,6 +166,9 @@ class Twig
|
|
185 |
$this->twig->addFilter(new TwigFilter('ucwords', 'ucwords'));
|
186 |
$this->twig->addFilter(new TwigFilter('lcfirst', 'lcfirst'));
|
187 |
$this->twig->addFilter(new TwigFilter('ucfirst', 'ucfirst'));
|
|
|
|
|
|
|
188 |
|
189 |
$this->addFunction_includeAssets();
|
190 |
$this->addFunction_linkTo();
|
@@ -376,6 +360,11 @@ class Twig
|
|
376 |
protected function addFilter_safeDecodeRaw()
|
377 |
{
|
378 |
$rawSafeDecoded = new TwigFilter('rawSafeDecoded', function ($string) {
|
|
|
|
|
|
|
|
|
|
|
379 |
$string = str_replace('+', '%2B', $string);
|
380 |
$string = str_replace(' ', html_entity_decode(' ', ENT_COMPAT | ENT_HTML401, 'UTF-8'), $string);
|
381 |
|
42 |
|
43 |
function piwik_fix_lbrace($string)
|
44 |
{
|
45 |
+
return Common::fixLbrace($string);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
46 |
}
|
47 |
|
48 |
function piwik_escape_filter(Environment $env, $string, $strategy = 'html', $charset = null, $autoescape = false) {
|
134 |
$chainLoader = new ChainLoader($loaders);
|
135 |
|
136 |
// Create new Twig Environment and set cache dir
|
137 |
+
$cache = StaticContainer::get('twig.cache');
|
138 |
|
139 |
$this->twig = new Environment($chainLoader,
|
140 |
array(
|
141 |
'debug' => true, // to use {{ dump(var) }} in twig templates
|
142 |
'strict_variables' => true, // throw an exception if variables are invalid
|
143 |
+
'cache' => $cache,
|
144 |
)
|
145 |
);
|
146 |
$this->twig->addExtension(new DebugExtension());
|
166 |
$this->twig->addFilter(new TwigFilter('ucwords', 'ucwords'));
|
167 |
$this->twig->addFilter(new TwigFilter('lcfirst', 'lcfirst'));
|
168 |
$this->twig->addFilter(new TwigFilter('ucfirst', 'ucfirst'));
|
169 |
+
$this->twig->addFilter(new TwigFilter('preg_replace', function ($subject, $pattern, $replacement) {
|
170 |
+
return preg_replace($pattern, $replacement, $subject);
|
171 |
+
}));
|
172 |
|
173 |
$this->addFunction_includeAssets();
|
174 |
$this->addFunction_linkTo();
|
360 |
protected function addFilter_safeDecodeRaw()
|
361 |
{
|
362 |
$rawSafeDecoded = new TwigFilter('rawSafeDecoded', function ($string) {
|
363 |
+
|
364 |
+
if ($string === null) {
|
365 |
+
return '';
|
366 |
+
}
|
367 |
+
|
368 |
$string = str_replace('+', '%2B', $string);
|
369 |
$string = str_replace(' ', html_entity_decode(' ', ENT_COMPAT | ENT_HTML401, 'UTF-8'), $string);
|
370 |
|
app/core/Updater.php
CHANGED
@@ -233,8 +233,8 @@ class Updater
|
|
233 |
*/
|
234 |
public function getSqlQueriesToExecute()
|
235 |
{
|
236 |
-
$queries
|
237 |
-
$classNames =
|
238 |
|
239 |
foreach ($this->componentsWithUpdateFile as $componentName => $componentUpdateInfo) {
|
240 |
foreach ($componentUpdateInfo as $file => $fileVersion) {
|
@@ -253,14 +253,16 @@ class Updater
|
|
253 |
|
254 |
$classNames[] = $className;
|
255 |
|
256 |
-
|
257 |
-
|
258 |
-
|
|
|
|
|
259 |
foreach ($migrationsForComponent as $index => $migration) {
|
260 |
$migration = $this->keepBcForOldMigrationQueryFormat($index, $migration);
|
261 |
$queries[] = $migration;
|
262 |
}
|
263 |
-
$this->hasMajorDbUpdate = $this->hasMajorDbUpdate || call_user_func(
|
264 |
}
|
265 |
}
|
266 |
return $queries;
|
@@ -477,40 +479,34 @@ class Updater
|
|
477 |
}
|
478 |
|
479 |
if (!empty($componentsWithUpdateFile)) {
|
480 |
-
$currentAccess = Access::getInstance();
|
481 |
-
$hasSuperUserAccess = $currentAccess->hasSuperUserAccess();
|
482 |
|
483 |
-
|
484 |
-
|
485 |
-
|
486 |
-
|
487 |
-
|
488 |
-
|
489 |
-
|
490 |
-
|
491 |
-
|
492 |
-
|
493 |
-
|
494 |
-
|
495 |
-
|
496 |
-
|
497 |
-
|
498 |
-
|
499 |
-
$
|
500 |
-
|
501 |
-
|
502 |
-
$
|
503 |
-
|
504 |
-
|
505 |
-
|
506 |
-
$deactivatedPlugins[] = $name;
|
507 |
}
|
508 |
}
|
509 |
-
}
|
510 |
|
511 |
-
|
512 |
-
$currentAccess->setSuperUserAccess(false);
|
513 |
-
}
|
514 |
}
|
515 |
|
516 |
Filesystem::deleteAllCacheOnUpdate();
|
233 |
*/
|
234 |
public function getSqlQueriesToExecute()
|
235 |
{
|
236 |
+
$queries = [];
|
237 |
+
$classNames = [];
|
238 |
|
239 |
foreach ($this->componentsWithUpdateFile as $componentName => $componentUpdateInfo) {
|
240 |
foreach ($componentUpdateInfo as $file => $fileVersion) {
|
253 |
|
254 |
$classNames[] = $className;
|
255 |
|
256 |
+
$migrationsForComponent = Access::doAsSuperUser(function() use ($className) {
|
257 |
+
/** @var Updates $update */
|
258 |
+
$update = StaticContainer::getContainer()->make($className);
|
259 |
+
return $update->getMigrations($this);
|
260 |
+
});
|
261 |
foreach ($migrationsForComponent as $index => $migration) {
|
262 |
$migration = $this->keepBcForOldMigrationQueryFormat($index, $migration);
|
263 |
$queries[] = $migration;
|
264 |
}
|
265 |
+
$this->hasMajorDbUpdate = $this->hasMajorDbUpdate || call_user_func([$className, 'isMajorUpdate']);
|
266 |
}
|
267 |
}
|
268 |
return $queries;
|
479 |
}
|
480 |
|
481 |
if (!empty($componentsWithUpdateFile)) {
|
|
|
|
|
482 |
|
483 |
+
Access::doAsSuperUser(function() use ($componentsWithUpdateFile, &$coreError, &$deactivatedPlugins, &$errors, &$warnings) {
|
484 |
+
|
485 |
+
$pluginManager = \Piwik\Plugin\Manager::getInstance();
|
486 |
+
|
487 |
+
// if error in any core update, show message + help message + EXIT
|
488 |
+
// if errors in any plugins updates, show them on screen, disable plugins that errored + CONTINUE
|
489 |
+
// if warning in any core update or in any plugins update, show message + CONTINUE
|
490 |
+
// if no error or warning, success message + CONTINUE
|
491 |
+
foreach ($componentsWithUpdateFile as $name => $filenames) {
|
492 |
+
try {
|
493 |
+
$warnings = array_merge($warnings, $this->update($name));
|
494 |
+
} catch (UpdaterErrorException $e) {
|
495 |
+
$errors[] = $e->getMessage();
|
496 |
+
if ($name == 'core') {
|
497 |
+
$coreError = true;
|
498 |
+
break;
|
499 |
+
} elseif ($pluginManager->isPluginActivated($name) && $pluginManager->isPluginBundledWithCore($name)) {
|
500 |
+
$coreError = true;
|
501 |
+
break;
|
502 |
+
} elseif ($pluginManager->isPluginActivated($name)) {
|
503 |
+
$pluginManager->deactivatePlugin($name);
|
504 |
+
$deactivatedPlugins[] = $name;
|
505 |
+
}
|
|
|
506 |
}
|
507 |
}
|
|
|
508 |
|
509 |
+
});
|
|
|
|
|
510 |
}
|
511 |
|
512 |
Filesystem::deleteAllCacheOnUpdate();
|
app/core/Updater/Migration/Custom.php
CHANGED
@@ -7,8 +7,6 @@
|
|
7 |
*/
|
8 |
namespace Piwik\Updater\Migration;
|
9 |
|
10 |
-
use Piwik\Config;
|
11 |
-
use Piwik\Container\StaticContainer;
|
12 |
use Piwik\Updater\Migration;
|
13 |
|
14 |
/**
|
7 |
*/
|
8 |
namespace Piwik\Updater\Migration;
|
9 |
|
|
|
|
|
10 |
use Piwik\Updater\Migration;
|
11 |
|
12 |
/**
|
app/core/Updater/Migration/Db/DropColumns.php
CHANGED
@@ -7,7 +7,6 @@
|
|
7 |
*/
|
8 |
namespace Piwik\Updater\Migration\Db;
|
9 |
|
10 |
-
use Piwik\Db;
|
11 |
use Piwik\DbHelper;
|
12 |
|
13 |
/**
|
7 |
*/
|
8 |
namespace Piwik\Updater\Migration\Db;
|
9 |
|
|
|
10 |
use Piwik\DbHelper;
|
11 |
|
12 |
/**
|
app/core/Updates/4.0.0-b1.php
CHANGED
@@ -25,7 +25,6 @@ use Piwik\Plugins\PagePerformance\Columns\TimeNetwork;
|
|
25 |
use Piwik\Plugins\PagePerformance\Columns\TimeOnLoad;
|
26 |
use Piwik\Plugins\PagePerformance\Columns\TimeServer;
|
27 |
use Piwik\Plugins\PagePerformance\Columns\TimeTransfer;
|
28 |
-
use Piwik\Plugins\UsersManager\Model;
|
29 |
use Piwik\Common;
|
30 |
use Piwik\Config;
|
31 |
use Piwik\Plugins\UserCountry\LocationProvider;
|
25 |
use Piwik\Plugins\PagePerformance\Columns\TimeOnLoad;
|
26 |
use Piwik\Plugins\PagePerformance\Columns\TimeServer;
|
27 |
use Piwik\Plugins\PagePerformance\Columns\TimeTransfer;
|
|
|
28 |
use Piwik\Common;
|
29 |
use Piwik\Config;
|
30 |
use Piwik\Plugins\UserCountry\LocationProvider;
|
app/core/Updates/4.0.0-rc3.php
CHANGED
@@ -9,7 +9,6 @@
|
|
9 |
|
10 |
namespace Piwik\Updates;
|
11 |
|
12 |
-
use Piwik\Config;
|
13 |
use Piwik\Updater;
|
14 |
use Piwik\Updates as PiwikUpdates;
|
15 |
use Piwik\Updater\Migration\Factory as MigrationFactory;
|
9 |
|
10 |
namespace Piwik\Updates;
|
11 |
|
|
|
12 |
use Piwik\Updater;
|
13 |
use Piwik\Updates as PiwikUpdates;
|
14 |
use Piwik\Updater\Migration\Factory as MigrationFactory;
|
app/core/Updates/4.0.0-rc4.php
CHANGED
@@ -9,7 +9,6 @@
|
|
9 |
|
10 |
namespace Piwik\Updates;
|
11 |
|
12 |
-
use Piwik\Config;
|
13 |
use Piwik\Container\StaticContainer;
|
14 |
use Piwik\DataAccess\ArchiveTableCreator;
|
15 |
use Piwik\Date;
|
9 |
|
10 |
namespace Piwik\Updates;
|
11 |
|
|
|
12 |
use Piwik\Container\StaticContainer;
|
13 |
use Piwik\DataAccess\ArchiveTableCreator;
|
14 |
use Piwik\Date;
|
app/core/Updates/4.0.1-b1.php
CHANGED
@@ -10,12 +10,6 @@
|
|
10 |
namespace Piwik\Updates;
|
11 |
|
12 |
use Piwik\Common;
|
13 |
-
use Piwik\Config;
|
14 |
-
use Piwik\Container\StaticContainer;
|
15 |
-
use Piwik\DataAccess\ArchiveTableCreator;
|
16 |
-
use Piwik\Date;
|
17 |
-
use Piwik\DbHelper;
|
18 |
-
use Piwik\Plugin\ReleaseChannels;
|
19 |
use Piwik\SettingsPiwik;
|
20 |
use Piwik\Updater;
|
21 |
use Piwik\Updates as PiwikUpdates;
|
10 |
namespace Piwik\Updates;
|
11 |
|
12 |
use Piwik\Common;
|
|
|
|
|
|
|
|
|
|
|
|
|
13 |
use Piwik\SettingsPiwik;
|
14 |
use Piwik\Updater;
|
15 |
use Piwik\Updates as PiwikUpdates;
|
app/core/Updates/4.1.2-b2.php
CHANGED
@@ -9,13 +9,7 @@
|
|
9 |
|
10 |
namespace Piwik\Updates;
|
11 |
|
12 |
-
use Piwik\Container\StaticContainer;
|
13 |
-
use Piwik\CronArchive;
|
14 |
use Piwik\DataAccess\ArchiveTableCreator;
|
15 |
-
use Piwik\Date;
|
16 |
-
use Piwik\Plugins\SegmentEditor\API;
|
17 |
-
use Piwik\Archive\ArchiveInvalidator;
|
18 |
-
use Piwik\ArchiveProcessor\Rules;
|
19 |
use Piwik\Updater;
|
20 |
use Piwik\Updates as PiwikUpdates;
|
21 |
use Piwik\Updater\Migration\Factory as MigrationFactory;
|
9 |
|
10 |
namespace Piwik\Updates;
|
11 |
|
|
|
|
|
12 |
use Piwik\DataAccess\ArchiveTableCreator;
|
|
|
|
|
|
|
|
|
13 |
use Piwik\Updater;
|
14 |
use Piwik\Updates as PiwikUpdates;
|
15 |
use Piwik\Updater\Migration\Factory as MigrationFactory;
|
app/core/Updates/4.10.0-b1.php
ADDED
@@ -0,0 +1,61 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Matomo - free/libre analytics platform
|
5 |
+
*
|
6 |
+
* @link https://matomo.org
|
7 |
+
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
8 |
+
*
|
9 |
+
*/
|
10 |
+
|
11 |
+
namespace Piwik\Updates;
|
12 |
+
|
13 |
+
use Piwik\Common;
|
14 |
+
use Piwik\Db;
|
15 |
+
use Piwik\Updater;
|
16 |
+
use Piwik\Updates as PiwikUpdates;
|
17 |
+
use Piwik\Updater\Migration;
|
18 |
+
use Piwik\Updater\Migration\Factory as MigrationFactory;
|
19 |
+
|
20 |
+
/**
|
21 |
+
* Update for version 4.10.0-b1
|
22 |
+
*/
|
23 |
+
class Updates_4_10_0_b1 extends PiwikUpdates
|
24 |
+
{
|
25 |
+
/**
|
26 |
+
* @var MigrationFactory
|
27 |
+
*/
|
28 |
+
private $migration;
|
29 |
+
|
30 |
+
public function __construct(MigrationFactory $factory)
|
31 |
+
{
|
32 |
+
$this->migration = $factory;
|
33 |
+
}
|
34 |
+
|
35 |
+
/**
|
36 |
+
* @param Updater $updater
|
37 |
+
*
|
38 |
+
* @return Migration[]
|
39 |
+
*/
|
40 |
+
public function getMigrations(Updater $updater)
|
41 |
+
{
|
42 |
+
$table = Common::prefixTable('report');
|
43 |
+
$invalidCount = Db::fetchOne(
|
44 |
+
"SELECT COUNT(*) FROM $table WHERE reports = ? OR parameters = ?",
|
45 |
+
['Array', 'Array']
|
46 |
+
);
|
47 |
+
|
48 |
+
if (0 === (int) $invalidCount) {
|
49 |
+
return [];
|
50 |
+
}
|
51 |
+
|
52 |
+
return [
|
53 |
+
$this->migration->db->sql("DELETE FROM " . $table . " WHERE reports = 'Array' OR parameters = 'Array'")
|
54 |
+
];
|
55 |
+
}
|
56 |
+
|
57 |
+
public function doUpdate(Updater $updater)
|
58 |
+
{
|
59 |
+
$updater->executeMigrations(__FILE__, $this->getMigrations($updater));
|
60 |
+
}
|
61 |
+
}
|
app/core/Updates/4.3.0-b3.php
CHANGED
@@ -11,10 +11,7 @@ namespace Piwik\Updates;
|
|
11 |
|
12 |
use Piwik\Updater;
|
13 |
use Piwik\Updates as PiwikUpdates;
|
14 |
-
use Piwik\Updater\Migration;
|
15 |
use Piwik\Updater\Migration\Factory as MigrationFactory;
|
16 |
-
use Piwik\Db;
|
17 |
-
use Piwik\Common;
|
18 |
|
19 |
/**
|
20 |
* Update for version 4.3.0-b3.
|
11 |
|
12 |
use Piwik\Updater;
|
13 |
use Piwik\Updates as PiwikUpdates;
|
|
|
14 |
use Piwik\Updater\Migration\Factory as MigrationFactory;
|
|
|
|
|
15 |
|
16 |
/**
|
17 |
* Update for version 4.3.0-b3.
|
app/core/Updates/4.3.0-b4.php
CHANGED
@@ -11,7 +11,6 @@ namespace Piwik\Updates;
|
|
11 |
|
12 |
use Piwik\Updater;
|
13 |
use Piwik\Updates as PiwikUpdates;
|
14 |
-
use Piwik\Updater\Migration;
|
15 |
use Piwik\Updater\Migration\Factory as MigrationFactory;
|
16 |
use Piwik\Db;
|
17 |
use Piwik\Common;
|
11 |
|
12 |
use Piwik\Updater;
|
13 |
use Piwik\Updates as PiwikUpdates;
|
|
|
14 |
use Piwik\Updater\Migration\Factory as MigrationFactory;
|
15 |
use Piwik\Db;
|
16 |
use Piwik\Common;
|
app/core/Updates/4.3.0-rc2.php
CHANGED
@@ -11,10 +11,7 @@ namespace Piwik\Updates;
|
|
11 |
|
12 |
use Piwik\Updater;
|
13 |
use Piwik\Updates as PiwikUpdates;
|
14 |
-
use Piwik\Updater\Migration;
|
15 |
use Piwik\Updater\Migration\Factory as MigrationFactory;
|
16 |
-
use Piwik\Db;
|
17 |
-
use Piwik\Common;
|
18 |
|
19 |
/**
|
20 |
* Update for version 4.3.0-rc2.
|
11 |
|
12 |
use Piwik\Updater;
|
13 |
use Piwik\Updates as PiwikUpdates;
|
|
|
14 |
use Piwik\Updater\Migration\Factory as MigrationFactory;
|
|
|
|
|
15 |
|
16 |
/**
|
17 |
* Update for version 4.3.0-rc2.
|
app/core/Updates/4.5.0-b1.php
CHANGED
@@ -9,7 +9,6 @@
|
|
9 |
|
10 |
namespace Piwik\Updates;
|
11 |
|
12 |
-
use Piwik\DbHelper;
|
13 |
use Piwik\Updater;
|
14 |
use Piwik\Updates as PiwikUpdates;
|
15 |
use Piwik\Updater\Migration\Factory as MigrationFactory;
|
9 |
|
10 |
namespace Piwik\Updates;
|
11 |
|
|
|
12 |
use Piwik\Updater;
|
13 |
use Piwik\Updates as PiwikUpdates;
|
14 |
use Piwik\Updater\Migration\Factory as MigrationFactory;
|
app/core/Updates/4.6.0-b1.php
CHANGED
@@ -11,7 +11,6 @@ namespace Piwik\Updates;
|
|
11 |
|
12 |
use Piwik\Updater;
|
13 |
use Piwik\Updates as PiwikUpdates;
|
14 |
-
use Piwik\Updater\Migration;
|
15 |
use Piwik\Updater\Migration\Factory as MigrationFactory;
|
16 |
|
17 |
class Updates_4_6_0_b1 extends PiwikUpdates
|
11 |
|
12 |
use Piwik\Updater;
|
13 |
use Piwik\Updates as PiwikUpdates;
|
|
|
14 |
use Piwik\Updater\Migration\Factory as MigrationFactory;
|
15 |
|
16 |
class Updates_4_6_0_b1 extends PiwikUpdates
|
app/core/Updates/4.7.0-b2.php
ADDED
@@ -0,0 +1,67 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Matomo - free/libre analytics platform
|
5 |
+
*
|
6 |
+
* @link https://matomo.org
|
7 |
+
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
8 |
+
*
|
9 |
+
*/
|
10 |
+
|
11 |
+
namespace Piwik\Updates;
|
12 |
+
|
13 |
+
use Piwik\Updater;
|
14 |
+
use Piwik\Updates as PiwikUpdates;
|
15 |
+
use Piwik\Updater\Migration;
|
16 |
+
use Piwik\Updater\Migration\Factory as MigrationFactory;
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Update for version 4.7.0-b2
|
20 |
+
*/
|
21 |
+
class Updates_4_7_0_b2 extends PiwikUpdates
|
22 |
+
{
|
23 |
+
/**
|
24 |
+
* @var MigrationFactory
|
25 |
+
*/
|
26 |
+
private $migration;
|
27 |
+
|
28 |
+
public function __construct(MigrationFactory $factory)
|
29 |
+
{
|
30 |
+
$this->migration = $factory;
|
31 |
+
}
|
32 |
+
|
33 |
+
/**
|
34 |
+
* Here you can define one or multiple SQL statements that should be executed during the update.
|
35 |
+
*
|
36 |
+
* @param Updater $updater
|
37 |
+
*
|
38 |
+
* @return Migration[]
|
39 |
+
*/
|
40 |
+
public function getMigrations(Updater $updater)
|
41 |
+
{
|
42 |
+
$migrations = [];
|
43 |
+
|
44 |
+
// add column to track the last change a user viewed the changes list
|
45 |
+
$migrations[] = $this->migration->db->addColumn('user', 'idchange_last_viewed',
|
46 |
+
'INTEGER UNSIGNED NULL');
|
47 |
+
|
48 |
+
$migrations[] = $this->migration->db->createTable('changes', array(
|
49 |
+
'idchange' => 'INT(11) NOT NULL AUTO_INCREMENT',
|
50 |
+
'created_time' => 'DATETIME NOT NULL',
|
51 |
+
'plugin_name' => 'VARCHAR(255) NOT NULL',
|
52 |
+
'version' => 'VARCHAR(20) NOT NULL',
|
53 |
+
'title' => 'VARCHAR(255) NOT NULL',
|
54 |
+
'description' => 'TEXT NOT NULL',
|
55 |
+
'link_name' => 'VARCHAR(255) NULL',
|
56 |
+
'link' => 'VARCHAR(255) NULL',
|
57 |
+
), $primaryKey = 'idchange');
|
58 |
+
|
59 |
+
return $migrations;
|
60 |
+
}
|
61 |
+
|
62 |
+
public function doUpdate(Updater $updater)
|
63 |
+
{
|
64 |
+
$updater->executeMigrations(__FILE__, $this->getMigrations($updater));
|
65 |
+
}
|
66 |
+
|
67 |
+
}
|
app/core/Updates/4.7.1-b1.php
ADDED
@@ -0,0 +1,57 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Matomo - free/libre analytics platform
|
5 |
+
*
|
6 |
+
* @link https://matomo.org
|
7 |
+
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
8 |
+
*
|
9 |
+
*/
|
10 |
+
|
11 |
+
namespace Piwik\Updates;
|
12 |
+
|
13 |
+
use Piwik\Updater;
|
14 |
+
use Piwik\Updates as PiwikUpdates;
|
15 |
+
use Piwik\Updater\Migration;
|
16 |
+
use Piwik\Updater\Migration\Factory as MigrationFactory;
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Update for version 4.7.1-b1
|
20 |
+
*/
|
21 |
+
class Updates_4_7_1_b1 extends PiwikUpdates
|
22 |
+
{
|
23 |
+
/**
|
24 |
+
* @var MigrationFactory
|
25 |
+
*/
|
26 |
+
private $migration;
|
27 |
+
|
28 |
+
public function __construct(MigrationFactory $factory)
|
29 |
+
{
|
30 |
+
$this->migration = $factory;
|
31 |
+
}
|
32 |
+
|
33 |
+
/**
|
34 |
+
* Here you can define one or multiple SQL statements that should be executed during the update.
|
35 |
+
*
|
36 |
+
* @param Updater $updater
|
37 |
+
*
|
38 |
+
* @return Migration[]
|
39 |
+
*/
|
40 |
+
public function getMigrations(Updater $updater)
|
41 |
+
{
|
42 |
+
$migrations = [];
|
43 |
+
|
44 |
+
$migrations[] = $this->migration->db->changeColumn('changes', 'plugin_name', 'plugin_name', 'VARCHAR(60) NOT NULL');
|
45 |
+
|
46 |
+
$migrations[] = $this->migration->db->dropIndex('changes', 'unique_plugin_version_title');
|
47 |
+
$migrations[] = $this->migration->db->addUniqueKey('changes', ['plugin_name', 'version', 'title(100)'], 'unique_plugin_version_title');
|
48 |
+
|
49 |
+
return $migrations;
|
50 |
+
}
|
51 |
+
|
52 |
+
public function doUpdate(Updater $updater)
|
53 |
+
{
|
54 |
+
$updater->executeMigrations(__FILE__, $this->getMigrations($updater));
|
55 |
+
}
|
56 |
+
|
57 |
+
}
|
app/core/Updates/5.0.0-b1.php
ADDED
@@ -0,0 +1,91 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Matomo - free/libre analytics platform
|
5 |
+
*
|
6 |
+
* @link https://matomo.org
|
7 |
+
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
8 |
+
*
|
9 |
+
*/
|
10 |
+
|
11 |
+
namespace Piwik\Updates;
|
12 |
+
|
13 |
+
use Piwik\Db;
|
14 |
+
use Piwik\Common;
|
15 |
+
use Piwik\Updater;
|
16 |
+
use Piwik\Updater\Migration\Db as DbAlias;
|
17 |
+
use Piwik\Updater\Migration\Factory;
|
18 |
+
use Piwik\Updates as PiwikUpdates;
|
19 |
+
|
20 |
+
/**
|
21 |
+
* Update for version 5.0.0-b1
|
22 |
+
*/
|
23 |
+
class Updates_5_0_0_b1 extends PiwikUpdates
|
24 |
+
{
|
25 |
+
/**
|
26 |
+
* @var Factory
|
27 |
+
*/
|
28 |
+
private $migration;
|
29 |
+
private $tableName;
|
30 |
+
private $indexName;
|
31 |
+
|
32 |
+
public function __construct(Factory $factory)
|
33 |
+
{
|
34 |
+
$this->migration = $factory;
|
35 |
+
|
36 |
+
$this->tableName = Common::prefixTable('log_visit');
|
37 |
+
$this->indexName = 'index_idsite_idvisitor';
|
38 |
+
}
|
39 |
+
|
40 |
+
public function doUpdate(Updater $updater)
|
41 |
+
{
|
42 |
+
$updater->executeMigrations(__FILE__, $this->getMigrations($updater));
|
43 |
+
}
|
44 |
+
|
45 |
+
public function getMigrations(Updater $updater)
|
46 |
+
{
|
47 |
+
if ($this->requiresUpdatedLogVisitTableIndex()) {
|
48 |
+
return $this->getLogVisitTableMigrations();
|
49 |
+
}
|
50 |
+
|
51 |
+
return [];
|
52 |
+
}
|
53 |
+
|
54 |
+
private function getLogVisitTableMigrations()
|
55 |
+
{
|
56 |
+
$migrations = [];
|
57 |
+
|
58 |
+
$migrations[] = $this->migration->db->dropIndex('log_visit', $this->indexName);
|
59 |
+
|
60 |
+
// Using the custom `sql` method instead of the `addIndex` method as it doesn't support DESC collation
|
61 |
+
$migrations[] = $this->migration->db->sql(
|
62 |
+
"ALTER TABLE `{$this->tableName}` ADD INDEX `{$this->indexName}` (`idsite`, `idvisitor`, `visit_last_action_time` DESC)",
|
63 |
+
[DbAlias::ERROR_CODE_DUPLICATE_KEY, DbAlias::ERROR_CODE_KEY_COLUMN_NOT_EXISTS]
|
64 |
+
);
|
65 |
+
|
66 |
+
return $migrations;
|
67 |
+
}
|
68 |
+
|
69 |
+
private function requiresUpdatedLogVisitTableIndex()
|
70 |
+
{
|
71 |
+
$sql = "SHOW INDEX FROM `{$this->tableName}` WHERE Key_name = '{$this->indexName}'";
|
72 |
+
|
73 |
+
$result = Db::fetchAll($sql);
|
74 |
+
|
75 |
+
if (empty($result)) {
|
76 |
+
// No index present - should be added
|
77 |
+
return true;
|
78 |
+
}
|
79 |
+
|
80 |
+
// Check that the $result contains all the required column names. This is required as there was a previous index
|
81 |
+
// with the same name that only consisted of two columns. We want to check this index is built with all three.
|
82 |
+
// $diff will be empty if all three columns are found, meaning that the index already exists.
|
83 |
+
$diff = array_diff(['idsite', 'idvisitor', 'visit_last_action_time'], array_column($result, 'Column_name'));
|
84 |
+
|
85 |
+
if (!$diff) {
|
86 |
+
return false;
|
87 |
+
}
|
88 |
+
|
89 |
+
return true;
|
90 |
+
}
|
91 |
+
}
|
app/core/Url.php
CHANGED
@@ -1,4 +1,5 @@
|
|
1 |
<?php
|
|
|
2 |
/**
|
3 |
* Matomo - free/libre analytics platform
|
4 |
*
|
@@ -6,6 +7,7 @@
|
|
6 |
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
7 |
*
|
8 |
*/
|
|
|
9 |
namespace Piwik;
|
10 |
|
11 |
use Exception;
|
@@ -129,7 +131,8 @@ class Url
|
|
129 |
$url = '';
|
130 |
|
131 |
// insert extra path info if proxy_uri_header is set and enabled
|
132 |
-
if (
|
|
|
133 |
&& Config::getInstance()->General['proxy_uri_header'] == 1
|
134 |
&& !empty($_SERVER['HTTP_X_FORWARDED_URI'])
|
135 |
) {
|
@@ -206,16 +209,17 @@ class Url
|
|
206 |
* value from the request.
|
207 |
* @return bool `true` if valid; `false` otherwise.
|
208 |
*/
|
209 |
-
public static function isValidHost($host = false)
|
210 |
{
|
211 |
// only do trusted host check if it's enabled
|
212 |
-
if (
|
|
|
213 |
&& Config::getInstance()->General['enable_trusted_host_check'] == 0
|
214 |
) {
|
215 |
return true;
|
216 |
}
|
217 |
|
218 |
-
if ($host ===
|
219 |
$host = self::getHostFromServerVariable();
|
220 |
if (empty($host)) {
|
221 |
// if no current host, assume valid
|
@@ -277,12 +281,13 @@ class Url
|
|
277 |
|
278 |
protected static function saveHostsnameInConfig($host, $domain, $key)
|
279 |
{
|
280 |
-
if (
|
|
|
281 |
&& file_exists(Config::getLocalConfigPath())
|
282 |
) {
|
283 |
$config = Config::getInstance()->$domain;
|
284 |
if (!is_array($host)) {
|
285 |
-
$host =
|
286 |
}
|
287 |
$host = array_filter($host);
|
288 |
if (empty($host)) {
|
@@ -339,6 +344,21 @@ class Url
|
|
339 |
return false;
|
340 |
}
|
341 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
342 |
/**
|
343 |
* Sets the host. Useful for CLI scripts, eg. core:archive command
|
344 |
*
|
@@ -363,7 +383,7 @@ class Url
|
|
363 |
*/
|
364 |
public static function getCurrentHost($default = 'unknown', $checkTrustedHost = true)
|
365 |
{
|
366 |
-
$hostHeaders =
|
367 |
|
368 |
$config = Config::getInstance()->General;
|
369 |
if (isset($config['proxy_host_headers'])) {
|
@@ -371,7 +391,7 @@ class Url
|
|
371 |
}
|
372 |
|
373 |
if (!is_array($hostHeaders)) {
|
374 |
-
$hostHeaders =
|
375 |
}
|
376 |
|
377 |
$host = self::getHost($checkTrustedHost);
|
@@ -390,7 +410,8 @@ class Url
|
|
390 |
public static function getCurrentQueryString()
|
391 |
{
|
392 |
$url = '';
|
393 |
-
if (
|
|
|
394 |
&& !empty($_SERVER['QUERY_STRING'])
|
395 |
) {
|
396 |
$url .= "?" . $_SERVER['QUERY_STRING'];
|
@@ -491,7 +512,8 @@ class Url
|
|
491 |
|
492 |
private static function redirectToUrlNoExit($url)
|
493 |
{
|
494 |
-
if (
|
|
|
495 |
|| strpos($url, 'index.php') === 0
|
496 |
) {
|
497 |
Common::sendResponseCode(302);
|
@@ -568,13 +590,13 @@ class Url
|
|
568 |
// handle host name mangling
|
569 |
$requestUri = isset($_SERVER['SCRIPT_URI']) ? $_SERVER['SCRIPT_URI'] : '';
|
570 |
$parseRequest = @parse_url($requestUri);
|
571 |
-
$hosts =
|
572 |
if (!empty($parseRequest['host'])) {
|
573 |
$hosts[] = $parseRequest['host'];
|
574 |
}
|
575 |
|
576 |
// drop port numbers from hostnames and IP addresses
|
577 |
-
$hosts = array_map(
|
578 |
|
579 |
$disableHostCheck = Config::getInstance()->General['enable_trusted_host_check'] == 0;
|
580 |
// compare scheme and host
|
@@ -583,7 +605,7 @@ class Url
|
|
583 |
return !empty($host)
|
584 |
&& ($disableHostCheck || in_array($host, $hosts))
|
585 |
&& !empty($parsedUrl['scheme'])
|
586 |
-
&& in_array($parsedUrl['scheme'],
|
587 |
}
|
588 |
|
589 |
/**
|
@@ -635,7 +657,7 @@ class Url
|
|
635 |
* Returns hostname, without port numbers
|
636 |
*
|
637 |
* @param $host
|
638 |
-
* @return
|
639 |
*/
|
640 |
public static function getHostSanitized($host)
|
641 |
{
|
@@ -650,12 +672,12 @@ class Url
|
|
650 |
$config = @Config::getInstance()->$domain;
|
651 |
|
652 |
if (!isset($config[$key])) {
|
653 |
-
return
|
654 |
}
|
655 |
|
656 |
$hosts = $config[$key];
|
657 |
if (!is_array($hosts)) {
|
658 |
-
return
|
659 |
}
|
660 |
return $hosts;
|
661 |
}
|
@@ -735,7 +757,7 @@ class Url
|
|
735 |
*/
|
736 |
public static function getLocalHostnames()
|
737 |
{
|
738 |
-
return
|
739 |
}
|
740 |
|
741 |
/**
|
@@ -769,10 +791,10 @@ class Url
|
|
769 |
return 'http';
|
770 |
}
|
771 |
|
772 |
-
if (
|
|
|
773 |
|| (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')
|
774 |
) {
|
775 |
-
|
776 |
return 'https';
|
777 |
}
|
778 |
return 'http';
|
@@ -796,7 +818,8 @@ class Url
|
|
796 |
{
|
797 |
$host = @$_SERVER['SERVER_NAME'];
|
798 |
if (!empty($host)) {
|
799 |
-
if (
|
|
|
800 |
&& !empty($_SERVER['SERVER_PORT'])
|
801 |
&& $_SERVER['SERVER_PORT'] != 80
|
802 |
&& $_SERVER['SERVER_PORT'] != 443
|
1 |
<?php
|
2 |
+
|
3 |
/**
|
4 |
* Matomo - free/libre analytics platform
|
5 |
*
|
7 |
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
8 |
*
|
9 |
*/
|
10 |
+
|
11 |
namespace Piwik;
|
12 |
|
13 |
use Exception;
|
131 |
$url = '';
|
132 |
|
133 |
// insert extra path info if proxy_uri_header is set and enabled
|
134 |
+
if (
|
135 |
+
isset(Config::getInstance()->General['proxy_uri_header'])
|
136 |
&& Config::getInstance()->General['proxy_uri_header'] == 1
|
137 |
&& !empty($_SERVER['HTTP_X_FORWARDED_URI'])
|
138 |
) {
|
209 |
* value from the request.
|
210 |
* @return bool `true` if valid; `false` otherwise.
|
211 |
*/
|
212 |
+
public static function isValidHost($host = false): bool
|
213 |
{
|
214 |
// only do trusted host check if it's enabled
|
215 |
+
if (
|
216 |
+
isset(Config::getInstance()->General['enable_trusted_host_check'])
|
217 |
&& Config::getInstance()->General['enable_trusted_host_check'] == 0
|
218 |
) {
|
219 |
return true;
|
220 |
}
|
221 |
|
222 |
+
if (false === $host || null === $host) {
|
223 |
$host = self::getHostFromServerVariable();
|
224 |
if (empty($host)) {
|
225 |
// if no current host, assume valid
|
281 |
|
282 |
protected static function saveHostsnameInConfig($host, $domain, $key)
|
283 |
{
|
284 |
+
if (
|
285 |
+
Piwik::hasUserSuperUserAccess()
|
286 |
&& file_exists(Config::getLocalConfigPath())
|
287 |
) {
|
288 |
$config = Config::getInstance()->$domain;
|
289 |
if (!is_array($host)) {
|
290 |
+
$host = [$host];
|
291 |
}
|
292 |
$host = array_filter($host);
|
293 |
if (empty($host)) {
|
344 |
return false;
|
345 |
}
|
346 |
|
347 |
+
/**
|
348 |
+
* Returns the valid hostname (according to RFC standards) as a string; else it will return false if it isn't valid.
|
349 |
+
* If the hostname isn't supplied it will default to using Url::getHost
|
350 |
+
* Note: this will not verify if the hostname is trusted.
|
351 |
+
* @param $hostname
|
352 |
+
* @return false|string
|
353 |
+
*/
|
354 |
+
public static function getRFCValidHostname($hostname = null)
|
355 |
+
{
|
356 |
+
if (empty($hostname)) {
|
357 |
+
$hostname = self::getHost(false);
|
358 |
+
}
|
359 |
+
return filter_var($hostname, FILTER_VALIDATE_DOMAIN, FILTER_FLAG_HOSTNAME);
|
360 |
+
}
|
361 |
+
|
362 |
/**
|
363 |
* Sets the host. Useful for CLI scripts, eg. core:archive command
|
364 |
*
|
383 |
*/
|
384 |
public static function getCurrentHost($default = 'unknown', $checkTrustedHost = true)
|
385 |
{
|
386 |
+
$hostHeaders = [];
|
387 |
|
388 |
$config = Config::getInstance()->General;
|
389 |
if (isset($config['proxy_host_headers'])) {
|
391 |
}
|
392 |
|
393 |
if (!is_array($hostHeaders)) {
|
394 |
+
$hostHeaders = [];
|
395 |
}
|
396 |
|
397 |
$host = self::getHost($checkTrustedHost);
|
410 |
public static function getCurrentQueryString()
|
411 |
{
|
412 |
$url = '';
|
413 |
+
if (
|
414 |
+
isset($_SERVER['QUERY_STRING'])
|
415 |
&& !empty($_SERVER['QUERY_STRING'])
|
416 |
) {
|
417 |
$url .= "?" . $_SERVER['QUERY_STRING'];
|
512 |
|
513 |
private static function redirectToUrlNoExit($url)
|
514 |
{
|
515 |
+
if (
|
516 |
+
UrlHelper::isLookLikeUrl($url)
|
517 |
|| strpos($url, 'index.php') === 0
|
518 |
) {
|
519 |
Common::sendResponseCode(302);
|
590 |
// handle host name mangling
|
591 |
$requestUri = isset($_SERVER['SCRIPT_URI']) ? $_SERVER['SCRIPT_URI'] : '';
|
592 |
$parseRequest = @parse_url($requestUri);
|
593 |
+
$hosts = [self::getHost(), self::getCurrentHost()];
|
594 |
if (!empty($parseRequest['host'])) {
|
595 |
$hosts[] = $parseRequest['host'];
|
596 |
}
|
597 |
|
598 |
// drop port numbers from hostnames and IP addresses
|
599 |
+
$hosts = array_map(['self', 'getHostSanitized'], $hosts);
|
600 |
|
601 |
$disableHostCheck = Config::getInstance()->General['enable_trusted_host_check'] == 0;
|
602 |
// compare scheme and host
|
605 |
return !empty($host)
|
606 |
&& ($disableHostCheck || in_array($host, $hosts))
|
607 |
&& !empty($parsedUrl['scheme'])
|
608 |
+
&& in_array($parsedUrl['scheme'], ['http', 'https']);
|
609 |
}
|
610 |
|
611 |
/**
|
657 |
* Returns hostname, without port numbers
|
658 |
*
|
659 |
* @param $host
|
660 |
+
* @return string
|
661 |
*/
|
662 |
public static function getHostSanitized($host)
|
663 |
{
|
672 |
$config = @Config::getInstance()->$domain;
|
673 |
|
674 |
if (!isset($config[$key])) {
|
675 |
+
return [];
|
676 |
}
|
677 |
|
678 |
$hosts = $config[$key];
|
679 |
if (!is_array($hosts)) {
|
680 |
+
return [];
|
681 |
}
|
682 |
return $hosts;
|
683 |
}
|
757 |
*/
|
758 |
public static function getLocalHostnames()
|
759 |
{
|
760 |
+
return ['localhost', '127.0.0.1', '::1', '[::1]', '[::]', '0000::1', '0177.0.0.1', '2130706433', '[0:0:0:0:0:ffff:127.0.0.1]'];
|
761 |
}
|
762 |
|
763 |
/**
|
791 |
return 'http';
|
792 |
}
|
793 |
|
794 |
+
if (
|
795 |
+
(isset($_SERVER['HTTPS']) && ($_SERVER['HTTPS'] == 'on' || $_SERVER['HTTPS'] === true))
|
796 |
|| (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')
|
797 |
) {
|
|
|
798 |
return 'https';
|
799 |
}
|
800 |
return 'http';
|
818 |
{
|
819 |
$host = @$_SERVER['SERVER_NAME'];
|
820 |
if (!empty($host)) {
|
821 |
+
if (
|
822 |
+
strpos($host, ':') === false
|
823 |
&& !empty($_SERVER['SERVER_PORT'])
|
824 |
&& $_SERVER['SERVER_PORT'] != 80
|
825 |
&& $_SERVER['SERVER_PORT'] != 443
|
app/core/UrlHelper.php
CHANGED
@@ -202,7 +202,7 @@ class UrlHelper
|
|
202 |
*/
|
203 |
public static function getArrayFromQueryString($urlQuery)
|
204 |
{
|
205 |
-
if (
|
206 |
return array();
|
207 |
}
|
208 |
|
202 |
*/
|
203 |
public static function getArrayFromQueryString($urlQuery)
|
204 |
{
|
205 |
+
if (empty($urlQuery)) {
|
206 |
return array();
|
207 |
}
|
208 |
|
app/core/Validators/CharacterLength.php
CHANGED
@@ -9,7 +9,6 @@
|
|
9 |
|
10 |
namespace Piwik\Validators;
|
11 |
|
12 |
-
use Piwik\Common;
|
13 |
use Piwik\Piwik;
|
14 |
|
15 |
class CharacterLength extends BaseValidator
|
9 |
|
10 |
namespace Piwik\Validators;
|
11 |
|
|
|
12 |
use Piwik\Piwik;
|
13 |
|
14 |
class CharacterLength extends BaseValidator
|
app/core/Version.php
CHANGED
@@ -1,4 +1,5 @@
|
|
1 |
<?php
|
|
|
2 |
/**
|
3 |
* Matomo - free/libre analytics platform
|
4 |
*
|
@@ -20,7 +21,7 @@ final class Version
|
|
20 |
* The current Matomo version.
|
21 |
* @var string
|
22 |
*/
|
23 |
-
const VERSION = '4.
|
24 |
|
25 |
const MAJOR_VERSION = 4;
|
26 |
|
1 |
<?php
|
2 |
+
|
3 |
/**
|
4 |
* Matomo - free/libre analytics platform
|
5 |
*
|
21 |
* The current Matomo version.
|
22 |
* @var string
|
23 |
*/
|
24 |
+
const VERSION = '4.10.0';
|
25 |
|
26 |
const MAJOR_VERSION = 4;
|
27 |
|
app/core/View.php
CHANGED
@@ -357,12 +357,13 @@ class View implements ViewInterface
|
|
357 |
$cache->save('cssCacheBusterId', $cssCacheBusterId);
|
358 |
}
|
359 |
|
360 |
-
$tagJs = 'cb=' . $cacheBuster->piwikVersionBasedCacheBuster();
|
361 |
$tagCss = 'cb=' . $cssCacheBusterId;
|
362 |
|
363 |
$pattern = array(
|
364 |
'~<script type=[\'"]text/javascript[\'"] src=[\'"]([^\'"]+)[\'"]>~',
|
365 |
'~<script src=[\'"]([^\'"]+)[\'"] type=[\'"]text/javascript[\'"]>~',
|
|
|
366 |
'~<link rel=[\'"]stylesheet[\'"] type=[\'"]text/css[\'"] href=[\'"]([^\'"]+)[\'"] ?/?>~',
|
367 |
// removes the double ?cb= tag
|
368 |
'~(src|href)=\"index.php\?module=([A-Za-z0-9_]+)&action=([A-Za-z0-9_]+)\?cb=~',
|
@@ -371,6 +372,7 @@ class View implements ViewInterface
|
|
371 |
$replace = array(
|
372 |
'<script type="text/javascript" src="$1?' . $tagJs . '">',
|
373 |
'<script type="text/javascript" src="$1?' . $tagJs . '">',
|
|
|
374 |
'<link rel="stylesheet" type="text/css" href="$1?' . $tagCss . '" />',
|
375 |
'$1="index.php?module=$2&action=$3&cb=',
|
376 |
);
|
357 |
$cache->save('cssCacheBusterId', $cssCacheBusterId);
|
358 |
}
|
359 |
|
360 |
+
$tagJs = 'cb=' . ($this->cacheBuster ?? $cacheBuster->piwikVersionBasedCacheBuster());
|
361 |
$tagCss = 'cb=' . $cssCacheBusterId;
|
362 |
|
363 |
$pattern = array(
|
364 |
'~<script type=[\'"]text/javascript[\'"] src=[\'"]([^\'"]+)[\'"]>~',
|
365 |
'~<script src=[\'"]([^\'"]+)[\'"] type=[\'"]text/javascript[\'"]>~',
|
366 |
+
'~<script type=[\'"]text/javascript[\'"] src=[\'"]([^\'"]+?chunk=[^\'"]+)[\'"] defer>~',
|
367 |
'~<link rel=[\'"]stylesheet[\'"] type=[\'"]text/css[\'"] href=[\'"]([^\'"]+)[\'"] ?/?>~',
|
368 |
// removes the double ?cb= tag
|
369 |
'~(src|href)=\"index.php\?module=([A-Za-z0-9_]+)&action=([A-Za-z0-9_]+)\?cb=~',
|
372 |
$replace = array(
|
373 |
'<script type="text/javascript" src="$1?' . $tagJs . '">',
|
374 |
'<script type="text/javascript" src="$1?' . $tagJs . '">',
|
375 |
+
'<script type="text/javascript" src="$1&' . $tagJs . '" defer>',
|
376 |
'<link rel="stylesheet" type="text/css" href="$1?' . $tagCss . '" />',
|
377 |
'$1="index.php?module=$2&action=$3&cb=',
|
378 |
);
|
app/core/View/HtmlReportEmailHeaderView.php
CHANGED
@@ -13,7 +13,6 @@ use Piwik\Common;
|
|
13 |
use Piwik\Date;
|
14 |
use Piwik\Mail\EmailStyles;
|
15 |
use Piwik\Plugin\ThemeStyles;
|
16 |
-
use Piwik\Plugins\API\API;
|
17 |
use Piwik\Plugins\CoreAdminHome\CustomLogo;
|
18 |
use Piwik\Scheduler\Schedule\Schedule;
|
19 |
use Piwik\SettingsPiwik;
|
13 |
use Piwik\Date;
|
14 |
use Piwik\Mail\EmailStyles;
|
15 |
use Piwik\Plugin\ThemeStyles;
|
|
|
16 |
use Piwik\Plugins\CoreAdminHome\CustomLogo;
|
17 |
use Piwik\Scheduler\Schedule\Schedule;
|
18 |
use Piwik\SettingsPiwik;
|
app/core/View/OneClickDone.php
CHANGED
@@ -32,7 +32,7 @@ class OneClickDone
|
|
32 |
/**
|
33 |
* @var string
|
34 |
*/
|
35 |
-
public $error;
|
36 |
|
37 |
/**
|
38 |
* @var array
|
32 |
/**
|
33 |
* @var string
|
34 |
*/
|
35 |
+
public $error = '';
|
36 |
|
37 |
/**
|
38 |
* @var array
|
app/core/Visualization/Sparkline.php
CHANGED
@@ -168,15 +168,19 @@ class Sparkline implements ViewInterface
|
|
168 |
private function setSparklineColors($sparkline, $seriesIndex) {
|
169 |
$colors = Common::getRequestVar('colors', false, 'json');
|
170 |
|
171 |
-
|
172 |
-
|
173 |
-
|
174 |
-
|
175 |
-
|
176 |
-
|
177 |
-
|
178 |
-
|
179 |
-
|
|
|
|
|
|
|
|
|
180 |
}
|
181 |
|
182 |
if (strtolower($colors['backgroundColor']) !== '#ffffff') {
|
@@ -186,10 +190,10 @@ class Sparkline implements ViewInterface
|
|
186 |
}
|
187 |
|
188 |
if (is_array($colors['lineColor'])) {
|
189 |
-
$sparkline->setLineColorHex($colors['lineColor'][$seriesIndex], $seriesIndex);
|
190 |
|
191 |
// set point colors to same as line colors so they can be better differentiated
|
192 |
-
$colors['minPointColor'] = $colors['maxPointColor'] = $colors['lastPointColor'] = $colors['lineColor'][$seriesIndex];
|
193 |
} else {
|
194 |
$sparkline->setLineColorHex($colors['lineColor']);
|
195 |
}
|
168 |
private function setSparklineColors($sparkline, $seriesIndex) {
|
169 |
$colors = Common::getRequestVar('colors', false, 'json');
|
170 |
|
171 |
+
$defaultColors = array(
|
172 |
+
'backgroundColor' => '#ffffff',
|
173 |
+
'lineColor' => '#162C4A',
|
174 |
+
'minPointColor' => '#ff7f7f',
|
175 |
+
'maxPointColor' => '#75BF7C',
|
176 |
+
'lastPointColor' => '#55AAFF',
|
177 |
+
'fillColor' => '#ffffff'
|
178 |
+
);
|
179 |
+
|
180 |
+
if (empty($colors)) {
|
181 |
+
$colors = $defaultColors; //set default color, if no color passed
|
182 |
+
} else {
|
183 |
+
$colors = array_merge($defaultColors, $colors); //set default color key, if no key set.
|
184 |
}
|
185 |
|
186 |
if (strtolower($colors['backgroundColor']) !== '#ffffff') {
|
190 |
}
|
191 |
|
192 |
if (is_array($colors['lineColor'])) {
|
193 |
+
$sparkline->setLineColorHex($colors['lineColor'][$seriesIndex] ?? $defaultColors['lineColor'], $seriesIndex);
|
194 |
|
195 |
// set point colors to same as line colors so they can be better differentiated
|
196 |
+
$colors['minPointColor'] = $colors['maxPointColor'] = $colors['lastPointColor'] = $colors['lineColor'][$seriesIndex] ?? $defaultColors['lineColor'];
|
197 |
} else {
|
198 |
$sparkline->setLineColorHex($colors['lineColor']);
|
199 |
}
|
app/core/testMinimumPhpVersion.php
CHANGED
@@ -1,4 +1,5 @@
|
|
1 |
<?php
|
|
|
2 |
/**
|
3 |
* Matomo - free/libre analytics platform
|
4 |
*
|
@@ -61,12 +62,12 @@ if ($minimumPhpInvalid) {
|
|
61 |
$composerInstall = "Download and run <a href=\"https://getcomposer.org/Composer-Setup.exe\"><b>Composer-Setup.exe</b></a>, it will install the latest Composer version and set up your PATH so that you can just call composer from any directory in your command line. "
|
62 |
. " <br>Then run this command in a terminal in the matomo directory: <br> $ php composer.phar install ";
|
63 |
}
|
64 |
-
$piwik_errorMessage .= "<p>It appears the <a href='https://getcomposer.org/' rel='noreferrer noopener' target='_blank'>composer</a> tool is not yet installed. You can install Composer in a few easy steps:\n\n".
|
65 |
-
"<br/>" . $composerInstall.
|
66 |
-
" This will initialize composer for Matomo and download libraries we use in vendor/* directory.".
|
67 |
"\n\n<br/><br/>Then reload this page to access your analytics reports." .
|
68 |
"\n\n<br/><br/>For more information check out this FAQ: <a href='https://matomo.org/faq/how-to-install/faq_18271/' rel='noreferrer noopener' target='_blank'>How do I use Matomo from the Git repository?</a>." .
|
69 |
-
"\n\n<br/><br/>Note: if for some reasons you cannot install composer, instead install the latest Matomo release from ".
|
70 |
"<a href='https://builds.matomo.org/piwik.zip' rel='noreferrer noopener'>builds.matomo.org</a>.</p>";
|
71 |
}
|
72 |
}
|
@@ -83,7 +84,8 @@ if (!function_exists('Piwik_GetErrorMessagePage')) {
|
|
83 |
*/
|
84 |
function Piwik_ShouldPrintBackTraceWithMessage()
|
85 |
{
|
86 |
-
if (
|
|
|
87 |
&& class_exists('\Piwik\Common')
|
88 |
&& \Piwik\SettingsServer::isArchivePhpTriggered()
|
89 |
&& \Piwik\Common::isPhpCliMode()
|
@@ -109,12 +111,24 @@ if (!function_exists('Piwik_GetErrorMessagePage')) {
|
|
109 |
* @param bool $optionalLinkBack If true, displays a link to go back
|
110 |
* @param bool|string $logoUrl The URL to the logo to use.
|
111 |
* @param bool|string $faviconUrl The URL to the favicon to use.
|
|
|
|
|
112 |
* @return string
|
113 |
*/
|
114 |
-
function Piwik_GetErrorMessagePage(
|
115 |
-
|
116 |
-
|
117 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
118 |
|
119 |
if (!headers_sent()) {
|
120 |
header('Content-Type: text/html; charset=utf-8');
|
@@ -127,7 +141,8 @@ if (!function_exists('Piwik_GetErrorMessagePage')) {
|
|
127 |
}
|
128 |
|
129 |
// We return only an HTML fragment for AJAX requests
|
130 |
-
if (
|
|
|
131 |
&& (strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) === 'xmlhttprequest')
|
132 |
) {
|
133 |
return "<div class='alert alert-danger'><strong>Error:</strong> $message</div>";
|
@@ -179,7 +194,7 @@ if (!function_exists('Piwik_GetErrorMessagePage')) {
|
|
179 |
. ' ' . $optionalLinks;
|
180 |
|
181 |
|
182 |
-
$message = str_replace(
|
183 |
$message = str_replace("\t", "", $message);
|
184 |
$message = strip_tags($message);
|
185 |
|
1 |
<?php
|
2 |
+
|
3 |
/**
|
4 |
* Matomo - free/libre analytics platform
|
5 |
*
|
62 |
$composerInstall = "Download and run <a href=\"https://getcomposer.org/Composer-Setup.exe\"><b>Composer-Setup.exe</b></a>, it will install the latest Composer version and set up your PATH so that you can just call composer from any directory in your command line. "
|
63 |
. " <br>Then run this command in a terminal in the matomo directory: <br> $ php composer.phar install ";
|
64 |
}
|
65 |
+
$piwik_errorMessage .= "<p>It appears the <a href='https://getcomposer.org/' rel='noreferrer noopener' target='_blank'>composer</a> tool is not yet installed. You can install Composer in a few easy steps:\n\n" .
|
66 |
+
"<br/>" . $composerInstall .
|
67 |
+
" This will initialize composer for Matomo and download libraries we use in vendor/* directory." .
|
68 |
"\n\n<br/><br/>Then reload this page to access your analytics reports." .
|
69 |
"\n\n<br/><br/>For more information check out this FAQ: <a href='https://matomo.org/faq/how-to-install/faq_18271/' rel='noreferrer noopener' target='_blank'>How do I use Matomo from the Git repository?</a>." .
|
70 |
+
"\n\n<br/><br/>Note: if for some reasons you cannot install composer, instead install the latest Matomo release from " .
|
71 |
"<a href='https://builds.matomo.org/piwik.zip' rel='noreferrer noopener'>builds.matomo.org</a>.</p>";
|
72 |
}
|
73 |
}
|
84 |
*/
|
85 |
function Piwik_ShouldPrintBackTraceWithMessage()
|
86 |
{
|
87 |
+
if (
|
88 |
+
class_exists('\Piwik\SettingsServer')
|
89 |
&& class_exists('\Piwik\Common')
|
90 |
&& \Piwik\SettingsServer::isArchivePhpTriggered()
|
91 |
&& \Piwik\Common::isPhpCliMode()
|
111 |
* @param bool $optionalLinkBack If true, displays a link to go back
|
112 |
* @param bool|string $logoUrl The URL to the logo to use.
|
113 |
* @param bool|string $faviconUrl The URL to the favicon to use.
|
114 |
+
* @param string $errorLogPrefix String to prepend to the error in log file
|
115 |
+
* @param bool $writeErrorLog If true then a webserver error log will be written, defaults to true
|
116 |
* @return string
|
117 |
*/
|
118 |
+
function Piwik_GetErrorMessagePage(
|
119 |
+
$message,
|
120 |
+
$optionalTrace = false,
|
121 |
+
$optionalLinks = false,
|
122 |
+
$optionalLinkBack = false,
|
123 |
+
$logoUrl = false,
|
124 |
+
$faviconUrl = false,
|
125 |
+
$isCli = null,
|
126 |
+
$errorLogPrefix = '',
|
127 |
+
bool $writeErrorLog = true
|
128 |
+
) {
|
129 |
+
if ($writeErrorLog) {
|
130 |
+
error_log(sprintf("${errorLogPrefix}Error in Matomo: %s", str_replace("\n", " ", strip_tags($message))));
|
131 |
+
}
|
132 |
|
133 |
if (!headers_sent()) {
|
134 |
header('Content-Type: text/html; charset=utf-8');
|
141 |
}
|
142 |
|
143 |
// We return only an HTML fragment for AJAX requests
|
144 |
+
if (
|
145 |
+
isset($_SERVER['HTTP_X_REQUESTED_WITH'])
|
146 |
&& (strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) === 'xmlhttprequest')
|
147 |
) {
|
148 |
return "<div class='alert alert-danger'><strong>Error:</strong> $message</div>";
|
194 |
. ' ' . $optionalLinks;
|
195 |
|
196 |
|
197 |
+
$message = str_replace(["<br />", "<br>", "<br/>", "</p>"], "\n", $message);
|
198 |
$message = str_replace("\t", "", $message);
|
199 |
$message = strip_tags($message);
|
200 |
|
app/js/piwik.min.js
CHANGED
@@ -11,7 +11,7 @@
|
|
11 |
;if(typeof _paq!=="object"){_paq=[]}if(typeof window.Matomo!=="object"){window.Matomo=window.Piwik=(function(){var r,b={},z={},J=document,g=navigator,ab=screen,W=window,h=W.performance||W.mozPerformance||W.msPerformance||W.webkitPerformance,t=W.encodeURIComponent,V=W.decodeURIComponent,k=unescape,L=[],H,u,al=[],y=0,af=0,X=0,m=false;function p(at){try{return V(at)}catch(au){return unescape(at)}}function M(au){var at=typeof au;return at!=="undefined"}function C(at){return typeof at==="function"}function Z(at){return typeof at==="object"}function x(at){return typeof at==="string"||at instanceof String}function ak(at){return typeof at==="number"||at instanceof Number
|
12 |
}function ac(at){return M(at)&&(ak(at)||(x(at)&&at.length))}function D(au){if(!au){return true}var at;var av=true;for(at in au){if(Object.prototype.hasOwnProperty.call(au,at)){av=false}}return av}function ao(at){var au=typeof console;if(au!=="undefined"&&console&&console.error){console.error(at)}}function aj(){var ay,ax,aA,au,at;for(ay=0;ay<arguments.length;ay+=1){at=null;if(arguments[ay]&&arguments[ay].slice){at=arguments[ay].slice()}au=arguments[ay];aA=au.shift();var az,av;var aw=x(aA)&&aA.indexOf("::")>0;if(aw){az=aA.split("::");av=az[0];aA=az[1];if("object"===typeof u[av]&&"function"===typeof u[av][aA]){u[av][aA].apply(u[av],au)}else{if(at){al.push(at)}}}else{for(ax=0;ax<L.length;ax++){if(x(aA)){av=L[ax];var aB=aA.indexOf(".")>0;if(aB){az=aA.split(".");if(av&&"object"===typeof av[az[0]]){av=av[az[0]];aA=az[1]}else{if(at){al.push(at);break}}}if(av[aA]){av[aA].apply(av,au)}else{var aC="The method '"+aA+'\' was not found in "_paq" variable. Please have a look at the Matomo tracker documentation: https://developer.matomo.org/api-reference/tracking-javascript';
|
13 |
ao(aC);if(!aB){throw new TypeError(aC)}}if(aA==="addTracker"){break}if(aA==="setTrackerUrl"||aA==="setSiteId"){break}}else{aA.apply(L[ax],au)}}}}}function ar(aw,av,au,at){if(aw.addEventListener){aw.addEventListener(av,au,at);return true}if(aw.attachEvent){return aw.attachEvent("on"+av,au)}aw["on"+av]=au}function n(at){if(J.readyState==="complete"){at()}else{if(W.addEventListener){W.addEventListener("load",at,false)}else{if(W.attachEvent){W.attachEvent("onload",at)}}}}function q(aw){var at=false;if(J.attachEvent){at=J.readyState==="complete"}else{at=J.readyState!=="loading"}if(at){aw();return}var av;if(J.addEventListener){ar(J,"DOMContentLoaded",function au(){J.removeEventListener("DOMContentLoaded",au,false);if(!at){at=true;aw()}})}else{if(J.attachEvent){J.attachEvent("onreadystatechange",function au(){if(J.readyState==="complete"){J.detachEvent("onreadystatechange",au);if(!at){at=true;aw()}}});if(J.documentElement.doScroll&&W===W.top){(function au(){if(!at){try{J.documentElement.doScroll("left")
|
14 |
-
}catch(ax){setTimeout(au,0);return}at=true;aw()}}())}}}ar(W,"load",function(){if(!at){at=true;aw()}},false)}function ag(au,az,aA){if(!au){return""}var at="",aw,av,ax,ay;for(aw in b){if(Object.prototype.hasOwnProperty.call(b,aw)){ay=b[aw]&&"function"===typeof b[aw][au];if(ay){av=b[aw][au];ax=av(az||{},aA);if(ax){at+=ax}}}}return at}function am(){var at;m=true;ag("unload");at=new Date();var
|
15 |
return au?au[1]:null}function d(at){var av=new RegExp("^(?:(?:https?|ftp):)/*(?:[^@]+@)?([^:/#]+)"),au=av.exec(at);return au?au[1]:at}function G(at){return(/^[0-9][0-9]*(\.[0-9]+)?$/).test(at)}function Q(av,aw){var at={},au;for(au in av){if(av.hasOwnProperty(au)&&aw(av[au])){at[au]=av[au]}}return at}function B(av){var at={},au;for(au in av){if(av.hasOwnProperty(au)){if(G(av[au])){at[au]=Math.round(av[au])}else{throw new Error('Parameter "'+au+'" provided value "'+av[au]+'" is not valid. Please provide a numeric value.')}}}return at}function l(au){var av="",at;for(at in au){if(au.hasOwnProperty(at)){av+="&"+t(at)+"="+t(au[at])}}return av}function an(au,at){au=String(au);return au.lastIndexOf(at,0)===0}function U(au,at){au=String(au);return au.indexOf(at,au.length-at.length)!==-1}function A(au,at){au=String(au);return au.indexOf(at)!==-1}function f(au,at){au=String(au);return au.substr(0,au.length-at)}function I(aw,av,ay){aw=String(aw);if(!ay){ay=""}var at=aw.indexOf("#");var az=aw.length;
|
16 |
if(at===-1){at=az}var ax=aw.substr(0,at);var au=aw.substr(at,az-at);if(ax.indexOf("?")===-1){ax+="?"}else{if(!U(ax,"?")){ax+="&"}}return ax+t(av)+"="+t(ay)+au}function j(au,av){au=String(au);if(au.indexOf("?"+av+"=")===-1&&au.indexOf("&"+av+"=")===-1){return au}var aw=au.indexOf("?");if(aw===-1){return au}var at=au.substr(aw+1);var aA=au.substr(0,aw);if(at){var aB="";var aD=at.indexOf("#");if(aD!==-1){aB=at.substr(aD+1);at=at.substr(0,aD)}var ax;var az=at.split("&");var ay=az.length-1;for(ay;ay>=0;ay--){ax=az[ay].split("=")[0];if(ax===av){az.splice(ay,1)}}var aC=az.join("&");if(aC){aA=aA+"?"+aC}if(aB){aA+="#"+aB}}return aA}function e(av,au){var at="[\\?&#]"+au+"=([^&#]*)";var ax=new RegExp(at);var aw=ax.exec(av);return aw?p(aw[1]):""}function a(at){if(at&&String(at)===at){return at.replace(/^\s+|\s+$/g,"")}return at}function F(at){return unescape(t(at))}function aq(aI){var av=function(aO,aN){return(aO<<aN)|(aO>>>(32-aN))},aJ=function(aQ){var aO="",aP,aN;for(aP=7;aP>=0;aP--){aN=(aQ>>>(aP*4))&15;
|
17 |
aO+=aN.toString(16)}return aO},ay,aL,aK,au=[],aC=1732584193,aA=4023233417,az=2562383102,ax=271733878,aw=3285377520,aH,aG,aF,aE,aD,aM,at,aB=[];aI=F(aI);at=aI.length;for(aL=0;aL<at-3;aL+=4){aK=aI.charCodeAt(aL)<<24|aI.charCodeAt(aL+1)<<16|aI.charCodeAt(aL+2)<<8|aI.charCodeAt(aL+3);aB.push(aK)}switch(at&3){case 0:aL=2147483648;break;case 1:aL=aI.charCodeAt(at-1)<<24|8388608;break;case 2:aL=aI.charCodeAt(at-2)<<24|aI.charCodeAt(at-1)<<16|32768;break;case 3:aL=aI.charCodeAt(at-3)<<24|aI.charCodeAt(at-2)<<16|aI.charCodeAt(at-1)<<8|128;break}aB.push(aL);while((aB.length&15)!==14){aB.push(0)}aB.push(at>>>29);aB.push((at<<3)&4294967295);for(ay=0;ay<aB.length;ay+=16){for(aL=0;aL<16;aL++){au[aL]=aB[ay+aL]}for(aL=16;aL<=79;aL++){au[aL]=av(au[aL-3]^au[aL-8]^au[aL-14]^au[aL-16],1)}aH=aC;aG=aA;aF=az;aE=ax;aD=aw;for(aL=0;aL<=19;aL++){aM=(av(aH,5)+((aG&aF)|(~aG&aE))+aD+au[aL]+1518500249)&4294967295;aD=aE;aE=aF;aF=av(aG,30);aG=aH;aH=aM}for(aL=20;aL<=39;aL++){aM=(av(aH,5)+(aG^aF^aE)+aD+au[aL]+1859775393)&4294967295;
|
@@ -29,42 +29,42 @@ at=ai.findFirstNodeHavingAttribute(au,this.CONTENT_PIECE_ATTR);if(!at){at=ai.fin
|
|
29 |
}if(aw){aw+="&ca=1"}return aw},buildContentBlock:function(av){if(!av){return}var at=this.findContentName(av);var au=this.findContentPiece(av);var aw=this.findContentTarget(av);at=this.trim(at);au=this.trim(au);aw=this.trim(aw);return{name:at||"Unknown",piece:au||"Unknown",target:aw||""}},collectContent:function(aw){if(!aw||!aw.length){return[]}var av=[];var at,au;for(at=0;at<aw.length;at++){au=this.buildContentBlock(aw[at]);if(M(au)){av.push(au)}}return av},setLocation:function(at){this.location=at},getLocation:function(){var at=this.location||W.location;if(!at.origin){at.origin=at.protocol+"//"+at.hostname+(at.port?":"+at.port:"")}return at},toAbsoluteUrl:function(au){if((!au||String(au)!==au)&&au!==""){return au}if(""===au){return this.getLocation().href}if(au.search(/^\/\//)!==-1){return this.getLocation().protocol+au}if(au.search(/:\/\//)!==-1){return au}if(0===au.indexOf("#")){return this.getLocation().origin+this.getLocation().pathname+au}if(0===au.indexOf("?")){return this.getLocation().origin+this.getLocation().pathname+au
|
30 |
}if(0===au.search("^[a-zA-Z]{2,11}:")){return au}if(au.search(/^\//)!==-1){return this.getLocation().origin+au}var at="(.*/)";var av=this.getLocation().origin+this.getLocation().pathname.match(new RegExp(at))[0];return av+au},isUrlToCurrentDomain:function(au){var av=this.toAbsoluteUrl(au);if(!av){return false}var at=this.getLocation().origin;if(at===av){return true}if(0===String(av).indexOf(at)){if(":"===String(av).substr(at.length,1)){return false}return true}return false},setHrefAttribute:function(au,at){if(!au||!at){return}ai.setAnyAttribute(au,"href",at)},shouldIgnoreInteraction:function(at){if(ai.hasNodeAttribute(at,this.CONTENT_IGNOREINTERACTION_ATTR)){return true}if(ai.hasNodeCssClass(at,this.CONTENT_IGNOREINTERACTION_CLASS)){return true}if(ai.hasNodeCssClass(at,this.LEGACY_CONTENT_IGNOREINTERACTION_CLASS)){return true}return false}};function aa(au,ax){if(ax){return ax}au=w.toAbsoluteUrl(au);if(A(au,"?")){var aw=au.indexOf("?");au=au.slice(0,aw)}if(U(au,"matomo.php")){au=f(au,"matomo.php".length)
|
31 |
}else{if(U(au,"piwik.php")){au=f(au,"piwik.php".length)}else{if(U(au,".php")){var at=au.lastIndexOf("/");var av=1;au=au.slice(0,at+av)}}}if(U(au,"/js/")){au=f(au,"js/".length)}return au}function R(az){var aB="Matomo_Overlay";var au=new RegExp("index\\.php\\?module=Overlay&action=startOverlaySession&idSite=([0-9]+)&period=([^&]+)&date=([^&]+)(&segment=[^&]*)?");var av=au.exec(J.referrer);if(av){var ax=av[1];if(ax!==String(az)){return false}var ay=av[2],at=av[3],aw=av[4];if(!aw){aw=""}else{if(aw.indexOf("&segment=")===0){aw=aw.substr("&segment=".length)}}W.name=aB+"###"+ay+"###"+at+"###"+aw}var aA=W.name.split("###");return aA.length===4&&aA[0]===aB}function ad(au,az,av){var ay=W.name.split("###"),ax=ay[1],at=ay[2],aw=ay[3],aA=aa(au,az);o(aA+"plugins/Overlay/client/client.js?v=1",function(){Matomo_Overlay_Client.initialize(aA,av,ax,at,aw)})}function v(){var av;try{av=W.frameElement}catch(au){return true}if(M(av)){return(av&&String(av.nodeName).toLowerCase()==="iframe")?true:false}try{return W.self!==W.top
|
32 |
-
}catch(at){return true}}function T(cj,cf){var bP=this,bj="mtm_consent",cL="mtm_cookie_consent",cU="mtm_consent_removed",ca=ae(J.domain,W.location.href,N()),c2=O(ca[0]),bT=p(ca[1]),bu=p(ca[2]),c0=false,cn="GET",
|
33 |
-
try{bp=J.title}catch(cG){bp=""}function aH(
|
34 |
-
if(
|
35 |
-
|
36 |
-
}if(
|
37 |
-
cF=new Date().getTime()}function
|
38 |
-
for(
|
39 |
-
|
40 |
-
var
|
41 |
-
}function bS(){var
|
42 |
-
if(!
|
43 |
-
}if(
|
44 |
-
var
|
45 |
-
}}if(a8&&bL&&!bn){
|
46 |
-
}}function bz(
|
47 |
-
var
|
48 |
-
}var
|
49 |
-
}var
|
50 |
-
var
|
51 |
-
if(!
|
52 |
-
}}return function(
|
53 |
-
}}
|
54 |
-
};this.getAttributionCampaignKeyword=function(){return bS()[1]};this.getAttributionReferrerTimestamp=function(){return bS()[2]};this.getAttributionReferrerUrl=function(){return bS()[3]};this.setTrackerUrl=function(
|
55 |
-
};this.appendToTrackingUrl=function(
|
56 |
-
}return
|
57 |
-
};this.disableCrossDomainLinking=function(){cV=false};this.isCrossDomainLinkingEnabled=function(){return cV};this.setCrossDomainLinkingTimeout=function(
|
58 |
-
}};this.setReferrerUrl=function(
|
59 |
-
if(
|
60 |
-
};this.setCookieConsentGiven=function(){if(bs&&!cY){bs=false;if(cc&&aA){aR();var
|
61 |
-
}c0=true;var
|
62 |
-
})};this.getNumTrackedPageViews=function(){return cx};this.trackPageView=function(
|
63 |
-
})}})};this.trackContentInteraction=function(
|
64 |
-
|
65 |
-
if(aH(cU)){if(
|
66 |
-
};n(function(){setTimeout(function(){bL=true},0)});u.trigger("TrackerSetup",[this])}function K(){return{push:aj}}function c(ay,ax){var az={};var av,aw;for(av=0;av<ax.length;av++){var at=ax[av];az[at]=1;for(aw=0;aw<ay.length;aw++){if(ay[aw]&&ay[aw][0]){var au=ay[aw][0];if(at===au){aj(ay[aw]);delete ay[aw];if(az[au]>1&&au!=="addTracker"&&au!=="enableLinkTracking"){ao("The method "+au+' is registered more than once in "_paq" variable. Only the last call has an effect. Please have a look at the multiple Matomo trackers documentation: https://developer.matomo.org/guides/tracking-javascript-guide#multiple-piwik-trackers')}az[au]++}}}}return ay}var E=["addTracker","forgetCookieConsentGiven","requireCookieConsent","disableCookies","setTrackerUrl","setAPIUrl","enableCrossDomainLinking","setCrossDomainLinkingTimeout","setSessionCookieTimeout","setVisitorCookieTimeout","setCookieNamePrefix","setCookieSameSite","setSecureCookie","setCookiePath","setCookieDomain","setDomains","setUserId","setVisitorId","setSiteId","alwaysUseSendBeacon","enableLinkTracking","setCookieConsentGiven","requireConsent","setConsentGiven","disablePerformanceTracking","setPagePerformanceTiming","setExcludedQueryParams"];
|
67 |
-
function ah(av,au){var at=new T(av,au);L.push(at);_paq=c(_paq,E);for(H=0;H<_paq.length;H++){if(_paq[H]){aj(_paq[H])}}_paq=new K();u.trigger("TrackerAdded",[at]);return at}ar(W,"beforeunload",am,false);ar(W,"online",function(){if(M(g.serviceWorker)){g.serviceWorker.ready.then(function(at){if(at&&at.sync){return at.sync.register("matomoSync")}},function(){})}},false);ar(W,"message",function(ay){if(!ay||!ay.origin){return}var aA,aw,au;var aB=d(ay.origin);var ax=u.getAsyncTrackers();for(aw=0;aw<ax.length;aw++){au=d(ax[aw].getMatomoUrl());if(au===aB){aA=ax[aw];break}}if(!aA){return}var av=null;try{av=JSON.parse(ay.data)}catch(az){return}if(!av){return}function at(aE){var aG=J.getElementsByTagName("iframe");for(aw=0;aw<aG.length;aw++){var aF=aG[aw];var aC=d(aF.src);if(aF.contentWindow&&M(aF.contentWindow.postMessage)&&aC===aB){var aD=JSON.stringify(aE);aF.contentWindow.postMessage(aD,"*")}}}if(M(av.maq_initial_value)){at({maq_opted_in:av.maq_initial_value&&aA.hasConsent(),maq_url:aA.getMatomoUrl(),maq_optout_by_default:aA.isConsentRequired()})
|
68 |
}else{if(M(av.maq_opted_in)){ax=u.getAsyncTrackers();for(aw=0;aw<ax.length;aw++){aA=ax[aw];if(av.maq_opted_in){aA.rememberConsentGiven()}else{aA.forgetConsentGiven()}}at({maq_confirm_opted_in:aA.hasConsent(),maq_url:aA.getMatomoUrl(),maq_optout_by_default:aA.isConsentRequired()})}}},false);Date.prototype.getTimeAlias=Date.prototype.getTime;u={initialized:false,JSON:W.JSON,DOM:{addEventListener:function(aw,av,au,at){var ax=typeof at;if(ax==="undefined"){at=false}ar(aw,av,au,at)},onLoad:n,onReady:q,isNodeVisible:i,isOrWasNodeVisible:w.isNodeVisible},on:function(au,at){if(!z[au]){z[au]=[]}z[au].push(at)},off:function(av,au){if(!z[av]){return}var at=0;for(at;at<z[av].length;at++){if(z[av][at]===au){z[av].splice(at,1)}}},trigger:function(av,aw,au){if(!z[av]){return}var at=0;for(at;at<z[av].length;at++){z[av][at].apply(au||W,aw)}},addPlugin:function(at,au){b[at]=au},getTracker:function(au,at){if(!M(at)){at=this.getAsyncTracker().getSiteId()}if(!M(au)){au=this.getAsyncTracker().getTrackerUrl()
|
69 |
}return new T(au,at)},getAsyncTrackers:function(){return L},addTracker:function(av,au){var at;if(!L.length){at=ah(av,au)}else{at=L[0].addTracker(av,au)}return at},getAsyncTracker:function(ax,aw){var av;if(L&&L.length&&L[0]){av=L[0]}else{return ah(ax,aw)}if(!aw&&!ax){return av}if((!M(aw)||null===aw)&&av){aw=av.getSiteId()}if((!M(ax)||null===ax)&&av){ax=av.getTrackerUrl()}var au,at=0;for(at;at<L.length;at++){au=L[at];if(au&&String(au.getSiteId())===String(aw)&&au.getTrackerUrl()===ax){return au}}},retryMissedPluginCalls:function(){var au=al;al=[];var at=0;for(at;at<au.length;at++){aj(au[at])}}};if(typeof define==="function"&&define.amd){define("piwik",[],function(){return u});define("matomo",[],function(){return u})}return u}())}
|
70 |
/*!!! pluginTrackerHook */
|
11 |
;if(typeof _paq!=="object"){_paq=[]}if(typeof window.Matomo!=="object"){window.Matomo=window.Piwik=(function(){var r,b={},z={},J=document,g=navigator,ab=screen,W=window,h=W.performance||W.mozPerformance||W.msPerformance||W.webkitPerformance,t=W.encodeURIComponent,V=W.decodeURIComponent,k=unescape,L=[],H,u,al=[],y=0,af=0,X=0,m=false;function p(at){try{return V(at)}catch(au){return unescape(at)}}function M(au){var at=typeof au;return at!=="undefined"}function C(at){return typeof at==="function"}function Z(at){return typeof at==="object"}function x(at){return typeof at==="string"||at instanceof String}function ak(at){return typeof at==="number"||at instanceof Number
|
12 |
}function ac(at){return M(at)&&(ak(at)||(x(at)&&at.length))}function D(au){if(!au){return true}var at;var av=true;for(at in au){if(Object.prototype.hasOwnProperty.call(au,at)){av=false}}return av}function ao(at){var au=typeof console;if(au!=="undefined"&&console&&console.error){console.error(at)}}function aj(){var ay,ax,aA,au,at;for(ay=0;ay<arguments.length;ay+=1){at=null;if(arguments[ay]&&arguments[ay].slice){at=arguments[ay].slice()}au=arguments[ay];aA=au.shift();var az,av;var aw=x(aA)&&aA.indexOf("::")>0;if(aw){az=aA.split("::");av=az[0];aA=az[1];if("object"===typeof u[av]&&"function"===typeof u[av][aA]){u[av][aA].apply(u[av],au)}else{if(at){al.push(at)}}}else{for(ax=0;ax<L.length;ax++){if(x(aA)){av=L[ax];var aB=aA.indexOf(".")>0;if(aB){az=aA.split(".");if(av&&"object"===typeof av[az[0]]){av=av[az[0]];aA=az[1]}else{if(at){al.push(at);break}}}if(av[aA]){av[aA].apply(av,au)}else{var aC="The method '"+aA+'\' was not found in "_paq" variable. Please have a look at the Matomo tracker documentation: https://developer.matomo.org/api-reference/tracking-javascript';
|
13 |
ao(aC);if(!aB){throw new TypeError(aC)}}if(aA==="addTracker"){break}if(aA==="setTrackerUrl"||aA==="setSiteId"){break}}else{aA.apply(L[ax],au)}}}}}function ar(aw,av,au,at){if(aw.addEventListener){aw.addEventListener(av,au,at);return true}if(aw.attachEvent){return aw.attachEvent("on"+av,au)}aw["on"+av]=au}function n(at){if(J.readyState==="complete"){at()}else{if(W.addEventListener){W.addEventListener("load",at,false)}else{if(W.attachEvent){W.attachEvent("onload",at)}}}}function q(aw){var at=false;if(J.attachEvent){at=J.readyState==="complete"}else{at=J.readyState!=="loading"}if(at){aw();return}var av;if(J.addEventListener){ar(J,"DOMContentLoaded",function au(){J.removeEventListener("DOMContentLoaded",au,false);if(!at){at=true;aw()}})}else{if(J.attachEvent){J.attachEvent("onreadystatechange",function au(){if(J.readyState==="complete"){J.detachEvent("onreadystatechange",au);if(!at){at=true;aw()}}});if(J.documentElement.doScroll&&W===W.top){(function au(){if(!at){try{J.documentElement.doScroll("left")
|
14 |
+
}catch(ax){setTimeout(au,0);return}at=true;aw()}}())}}}ar(W,"load",function(){if(!at){at=true;aw()}},false)}function ag(au,az,aA){if(!au){return""}var at="",aw,av,ax,ay;for(aw in b){if(Object.prototype.hasOwnProperty.call(b,aw)){ay=b[aw]&&"function"===typeof b[aw][au];if(ay){av=b[aw][au];ax=av(az||{},aA);if(ax){at+=ax}}}}return at}function am(au){var at;m=true;ag("unload");at=new Date();var av=at.getTimeAlias();if((r-av)>3000){r=av+3000}if(r){do{at=new Date()}while(at.getTimeAlias()<r)}}function o(av,au){var at=J.createElement("script");at.type="text/javascript";at.src=av;if(at.readyState){at.onreadystatechange=function(){var aw=this.readyState;if(aw==="loaded"||aw==="complete"){at.onreadystatechange=null;au()}}}else{at.onload=au}J.getElementsByTagName("head")[0].appendChild(at)}function N(){var at="";try{at=W.top.document.referrer}catch(av){if(W.parent){try{at=W.parent.document.referrer}catch(au){at=""}}}if(at===""){at=J.referrer}return at}function s(at){var av=new RegExp("^([a-z]+):"),au=av.exec(at);
|
15 |
return au?au[1]:null}function d(at){var av=new RegExp("^(?:(?:https?|ftp):)/*(?:[^@]+@)?([^:/#]+)"),au=av.exec(at);return au?au[1]:at}function G(at){return(/^[0-9][0-9]*(\.[0-9]+)?$/).test(at)}function Q(av,aw){var at={},au;for(au in av){if(av.hasOwnProperty(au)&&aw(av[au])){at[au]=av[au]}}return at}function B(av){var at={},au;for(au in av){if(av.hasOwnProperty(au)){if(G(av[au])){at[au]=Math.round(av[au])}else{throw new Error('Parameter "'+au+'" provided value "'+av[au]+'" is not valid. Please provide a numeric value.')}}}return at}function l(au){var av="",at;for(at in au){if(au.hasOwnProperty(at)){av+="&"+t(at)+"="+t(au[at])}}return av}function an(au,at){au=String(au);return au.lastIndexOf(at,0)===0}function U(au,at){au=String(au);return au.indexOf(at,au.length-at.length)!==-1}function A(au,at){au=String(au);return au.indexOf(at)!==-1}function f(au,at){au=String(au);return au.substr(0,au.length-at)}function I(aw,av,ay){aw=String(aw);if(!ay){ay=""}var at=aw.indexOf("#");var az=aw.length;
|
16 |
if(at===-1){at=az}var ax=aw.substr(0,at);var au=aw.substr(at,az-at);if(ax.indexOf("?")===-1){ax+="?"}else{if(!U(ax,"?")){ax+="&"}}return ax+t(av)+"="+t(ay)+au}function j(au,av){au=String(au);if(au.indexOf("?"+av+"=")===-1&&au.indexOf("&"+av+"=")===-1){return au}var aw=au.indexOf("?");if(aw===-1){return au}var at=au.substr(aw+1);var aA=au.substr(0,aw);if(at){var aB="";var aD=at.indexOf("#");if(aD!==-1){aB=at.substr(aD+1);at=at.substr(0,aD)}var ax;var az=at.split("&");var ay=az.length-1;for(ay;ay>=0;ay--){ax=az[ay].split("=")[0];if(ax===av){az.splice(ay,1)}}var aC=az.join("&");if(aC){aA=aA+"?"+aC}if(aB){aA+="#"+aB}}return aA}function e(av,au){var at="[\\?&#]"+au+"=([^&#]*)";var ax=new RegExp(at);var aw=ax.exec(av);return aw?p(aw[1]):""}function a(at){if(at&&String(at)===at){return at.replace(/^\s+|\s+$/g,"")}return at}function F(at){return unescape(t(at))}function aq(aI){var av=function(aO,aN){return(aO<<aN)|(aO>>>(32-aN))},aJ=function(aQ){var aO="",aP,aN;for(aP=7;aP>=0;aP--){aN=(aQ>>>(aP*4))&15;
|
17 |
aO+=aN.toString(16)}return aO},ay,aL,aK,au=[],aC=1732584193,aA=4023233417,az=2562383102,ax=271733878,aw=3285377520,aH,aG,aF,aE,aD,aM,at,aB=[];aI=F(aI);at=aI.length;for(aL=0;aL<at-3;aL+=4){aK=aI.charCodeAt(aL)<<24|aI.charCodeAt(aL+1)<<16|aI.charCodeAt(aL+2)<<8|aI.charCodeAt(aL+3);aB.push(aK)}switch(at&3){case 0:aL=2147483648;break;case 1:aL=aI.charCodeAt(at-1)<<24|8388608;break;case 2:aL=aI.charCodeAt(at-2)<<24|aI.charCodeAt(at-1)<<16|32768;break;case 3:aL=aI.charCodeAt(at-3)<<24|aI.charCodeAt(at-2)<<16|aI.charCodeAt(at-1)<<8|128;break}aB.push(aL);while((aB.length&15)!==14){aB.push(0)}aB.push(at>>>29);aB.push((at<<3)&4294967295);for(ay=0;ay<aB.length;ay+=16){for(aL=0;aL<16;aL++){au[aL]=aB[ay+aL]}for(aL=16;aL<=79;aL++){au[aL]=av(au[aL-3]^au[aL-8]^au[aL-14]^au[aL-16],1)}aH=aC;aG=aA;aF=az;aE=ax;aD=aw;for(aL=0;aL<=19;aL++){aM=(av(aH,5)+((aG&aF)|(~aG&aE))+aD+au[aL]+1518500249)&4294967295;aD=aE;aE=aF;aF=av(aG,30);aG=aH;aH=aM}for(aL=20;aL<=39;aL++){aM=(av(aH,5)+(aG^aF^aE)+aD+au[aL]+1859775393)&4294967295;
|
29 |
}if(aw){aw+="&ca=1"}return aw},buildContentBlock:function(av){if(!av){return}var at=this.findContentName(av);var au=this.findContentPiece(av);var aw=this.findContentTarget(av);at=this.trim(at);au=this.trim(au);aw=this.trim(aw);return{name:at||"Unknown",piece:au||"Unknown",target:aw||""}},collectContent:function(aw){if(!aw||!aw.length){return[]}var av=[];var at,au;for(at=0;at<aw.length;at++){au=this.buildContentBlock(aw[at]);if(M(au)){av.push(au)}}return av},setLocation:function(at){this.location=at},getLocation:function(){var at=this.location||W.location;if(!at.origin){at.origin=at.protocol+"//"+at.hostname+(at.port?":"+at.port:"")}return at},toAbsoluteUrl:function(au){if((!au||String(au)!==au)&&au!==""){return au}if(""===au){return this.getLocation().href}if(au.search(/^\/\//)!==-1){return this.getLocation().protocol+au}if(au.search(/:\/\//)!==-1){return au}if(0===au.indexOf("#")){return this.getLocation().origin+this.getLocation().pathname+au}if(0===au.indexOf("?")){return this.getLocation().origin+this.getLocation().pathname+au
|
30 |
}if(0===au.search("^[a-zA-Z]{2,11}:")){return au}if(au.search(/^\//)!==-1){return this.getLocation().origin+au}var at="(.*/)";var av=this.getLocation().origin+this.getLocation().pathname.match(new RegExp(at))[0];return av+au},isUrlToCurrentDomain:function(au){var av=this.toAbsoluteUrl(au);if(!av){return false}var at=this.getLocation().origin;if(at===av){return true}if(0===String(av).indexOf(at)){if(":"===String(av).substr(at.length,1)){return false}return true}return false},setHrefAttribute:function(au,at){if(!au||!at){return}ai.setAnyAttribute(au,"href",at)},shouldIgnoreInteraction:function(at){if(ai.hasNodeAttribute(at,this.CONTENT_IGNOREINTERACTION_ATTR)){return true}if(ai.hasNodeCssClass(at,this.CONTENT_IGNOREINTERACTION_CLASS)){return true}if(ai.hasNodeCssClass(at,this.LEGACY_CONTENT_IGNOREINTERACTION_CLASS)){return true}return false}};function aa(au,ax){if(ax){return ax}au=w.toAbsoluteUrl(au);if(A(au,"?")){var aw=au.indexOf("?");au=au.slice(0,aw)}if(U(au,"matomo.php")){au=f(au,"matomo.php".length)
|
31 |
}else{if(U(au,"piwik.php")){au=f(au,"piwik.php".length)}else{if(U(au,".php")){var at=au.lastIndexOf("/");var av=1;au=au.slice(0,at+av)}}}if(U(au,"/js/")){au=f(au,"js/".length)}return au}function R(az){var aB="Matomo_Overlay";var au=new RegExp("index\\.php\\?module=Overlay&action=startOverlaySession&idSite=([0-9]+)&period=([^&]+)&date=([^&]+)(&segment=[^&]*)?");var av=au.exec(J.referrer);if(av){var ax=av[1];if(ax!==String(az)){return false}var ay=av[2],at=av[3],aw=av[4];if(!aw){aw=""}else{if(aw.indexOf("&segment=")===0){aw=aw.substr("&segment=".length)}}W.name=aB+"###"+ay+"###"+at+"###"+aw}var aA=W.name.split("###");return aA.length===4&&aA[0]===aB}function ad(au,az,av){var ay=W.name.split("###"),ax=ay[1],at=ay[2],aw=ay[3],aA=aa(au,az);o(aA+"plugins/Overlay/client/client.js?v=1",function(){Matomo_Overlay_Client.initialize(aA,av,ax,at,aw)})}function v(){var av;try{av=W.frameElement}catch(au){return true}if(M(av)){return(av&&String(av.nodeName).toLowerCase()==="iframe")?true:false}try{return W.self!==W.top
|
32 |
+
}catch(at){return true}}function T(cj,cf){var bP=this,bj="mtm_consent",cL="mtm_cookie_consent",cU="mtm_consent_removed",ca=ae(J.domain,W.location.href,N()),c2=O(ca[0]),bT=p(ca[1]),bu=p(ca[2]),c0=false,cn="GET",dj=cn,aM="application/x-www-form-urlencoded; charset=UTF-8",cE=aM,aI=cj||"",bO="",c9="",ct="",cc=cf||"",bF="",bU="",ba,bp="",dg=["7z","aac","apk","arc","arj","asf","asx","avi","azw3","bin","csv","deb","dmg","doc","docx","epub","exe","flv","gif","gz","gzip","hqx","ibooks","jar","jpg","jpeg","js","mobi","mp2","mp3","mp4","mpg","mpeg","mov","movie","msi","msp","odb","odf","odg","ods","odt","ogg","ogv","pdf","phps","png","ppt","pptx","qt","qtm","ra","ram","rar","rpm","rtf","sea","sit","tar","tbz","tbz2","bz","bz2","tgz","torrent","txt","wav","wma","wmv","wpd","xls","xlsx","xml","z","zip"],aC=[c2],bG=[],co=[],bR=[],be=[],bQ=500,c5=true,cR,bb,bX,bV,at,cw=["pk_campaign","mtm_campaign","piwik_campaign","matomo_campaign","utm_campaign","utm_source","utm_medium"],bN=["pk_kwd","mtm_kwd","piwik_kwd","matomo_kwd","utm_term"],bq="_pk_",az="pk_vid",a5=180,c7,bw,bY=false,aN="Lax",bs=false,cY,bk,bC,cS=33955200000,cu=1800000,df=15768000000,a8=true,bL=false,bn=false,bW=false,aV=false,ch,b2={},cs={},bt={},bA=200,cA={},da={},dh={},cg=[],ck=false,cJ=false,au=false,di=false,cV=false,aS=false,bi=v(),cF=null,c8=null,aW,bI,cd=aq,bv,aQ,bH=false,cx=0,bB=["id","ses","cvar","ref"],cI=false,bJ=null,cT=[],cz=[],aB=X++,aA=false,c6=true;
|
33 |
+
try{bp=J.title}catch(cG){bp=""}function aH(dv){if(bs){return 0}var dt=new RegExp("(^|;)[ ]*"+dv+"=([^;]*)"),du=dt.exec(J.cookie);return du?V(du[2]):0}bJ=!aH(cU);function dn(dx,dy,dB,dA,dv,dw,dz){if(bs&&dx!==cU){return}var du;if(dB){du=new Date();du.setTime(du.getTime()+dB)}if(!dz){dz="Lax"}J.cookie=dx+"="+t(dy)+(dB?";expires="+du.toGMTString():"")+";path="+(dA||"/")+(dv?";domain="+dv:"")+(dw?";secure":"")+";SameSite="+dz;if((!dB||dB>=0)&&aH(dx)!==String(dy)){var dt="There was an error setting cookie `"+dx+"`. Please check domain and path.";ao(dt)}}function b8(dt){var dv,du;dt=j(dt,az);for(du=0;du<co.length;du++){dt=j(dt,co[du])}if(bV){dv=new RegExp("#.*");return dt.replace(dv,"")}return dt}function b1(dv,dt){var dw=s(dt),du;if(dw){return dt}if(dt.slice(0,1)==="/"){return s(dv)+"://"+d(dv)+dt}dv=b8(dv);du=dv.indexOf("?");if(du>=0){dv=dv.slice(0,du)}du=dv.lastIndexOf("/");if(du!==dv.length-1){dv=dv.slice(0,du+1)}return dv+dt}function cP(dv,dt){var du;dv=String(dv).toLowerCase();dt=String(dt).toLowerCase();
|
34 |
+
if(dv===dt){return true}if(dt.slice(0,1)==="."){if(dv===dt.slice(1)){return true}du=dv.length-dt.length;if((du>0)&&(dv.slice(du)===dt)){return true}}return false}function cr(dt){var du=document.createElement("a");if(dt.indexOf("//")!==0&&dt.indexOf("http")!==0){if(dt.indexOf("*")===0){dt=dt.substr(1)}if(dt.indexOf(".")===0){dt=dt.substr(1)}dt="http://"+dt}du.href=w.toAbsoluteUrl(dt);if(du.pathname){return du.pathname}return""}function a9(du,dt){if(!an(dt,"/")){dt="/"+dt}if(!an(du,"/")){du="/"+du}var dv=(dt==="/"||dt==="/*");if(dv){return true}if(du===dt){return true}dt=String(dt).toLowerCase();du=String(du).toLowerCase();if(U(dt,"*")){dt=dt.slice(0,-1);dv=(!dt||dt==="/");if(dv){return true}if(du===dt){return true}return du.indexOf(dt)===0}if(!U(du,"/")){du+="/"}if(!U(dt,"/")){dt+="/"}return du.indexOf(dt)===0}function aw(dx,dz){var du,dt,dv,dw,dy;for(du=0;du<aC.length;du++){dw=O(aC[du]);dy=cr(aC[du]);if(cP(dx,dw)&&a9(dz,dy)){return true}}return false}function a1(dw){var du,dt,dv;for(du=0;
|
35 |
+
du<aC.length;du++){dt=O(aC[du].toLowerCase());if(dw===dt){return true}if(dt.slice(0,1)==="."){if(dw===dt.slice(1)){return true}dv=dw.length-dt.length;if((dv>0)&&(dw.slice(dv)===dt)){return true}}}return false}function cv(dt,dv){dt=dt.replace("send_image=0","send_image=1");var du=new Image(1,1);du.onload=function(){H=0;if(typeof dv==="function"){dv({request:dt,trackerUrl:aI,success:true})}};du.onerror=function(){if(typeof dv==="function"){dv({request:dt,trackerUrl:aI,success:false})}};du.src=aI+(aI.indexOf("?")<0?"?":"&")+dt}function cM(dt){if(dj==="POST"){return true}return dt&&(dt.length>2000||dt.indexOf('{"requests"')===0)}function aP(){return"object"===typeof g&&"function"===typeof g.sendBeacon&&"function"===typeof Blob}function bc(dx,dA,dz){var dv=aP();if(!dv){return false}var dw={type:"application/x-www-form-urlencoded; charset=UTF-8"};var dB=false;var du=aI;try{var dt=new Blob([dx],dw);if(dz&&!cM(dx)){dt=new Blob([],dw);du=du+(du.indexOf("?")<0?"?":"&")+dx}dB=g.sendBeacon(du,dt)}catch(dy){return false
|
36 |
+
}if(dB&&typeof dA==="function"){dA({request:dx,trackerUrl:aI,success:true,isSendBeacon:true})}return dB}function de(du,dv,dt){if(!M(dt)||null===dt){dt=true}if(m&&bc(du,dv,dt)){return}setTimeout(function(){if(m&&bc(du,dv,dt)){return}var dy;try{var dx=W.XMLHttpRequest?new W.XMLHttpRequest():W.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):null;dx.open("POST",aI,true);dx.onreadystatechange=function(){if(this.readyState===4&&!(this.status>=200&&this.status<300)){var dz=m&&bc(du,dv,dt);if(!dz&&dt){cv(du,dv)}else{if(typeof dv==="function"){dv({request:du,trackerUrl:aI,success:false,xhr:this})}}}else{if(this.readyState===4&&(typeof dv==="function")){dv({request:du,trackerUrl:aI,success:true,xhr:this})}}};dx.setRequestHeader("Content-Type",cE);dx.withCredentials=true;dx.send(du)}catch(dw){dy=m&&bc(du,dv,dt);if(!dy&&dt){cv(du,dv)}else{if(typeof dv==="function"){dv({request:du,trackerUrl:aI,success:false})}}}},50)}function cl(du){var dt=new Date();var dv=dt.getTime()+du;if(!r||dv>r){r=dv}}function bg(){bi=true;
|
37 |
+
cF=new Date().getTime()}function dm(){var dt=new Date().getTime();return !cF||(dt-cF)>bb}function aD(){if(dm()){bX()}}function a0(){if(J.visibilityState==="hidden"&&dm()){bX()}else{if(J.visibilityState==="visible"){cF=new Date().getTime()}}}function dq(){if(aS||!bb){return}aS=true;ar(W,"focus",bg);ar(W,"blur",aD);ar(W,"visibilitychange",a0);af++;u.addPlugin("HeartBeat"+af,{unload:function(){if(aS&&dm()){bX()}}})}function cK(dx){var du=new Date();var dt=du.getTime();c8=dt;if(cJ&&dt<cJ){var dv=cJ-dt;setTimeout(dx,dv);cl(dv+50);cJ+=50;return}if(cJ===false){var dw=800;cJ=dt+dw}dx()}function aT(){if(aH(cU)){bJ=false}else{if(aH(bj)){bJ=true}}}function bM(du,dt,dv){aT();if(!bJ){cT.push(du);return}aA=true;if(!cY&&du){if(cI&&bJ){du+="&consent=1"}cK(function(){if(c5&&bc(du,dv,true)){cl(100);return}if(cM(du)){de(du,dv)}else{cv(du,dv)}cl(dt)})}if(!aS){dq()}}function cq(dt){if(cY){return false}return(dt&&dt.length)}function dd(dt,dx){if(!dx||dx>=dt.length){return[dt]}var du=0;var dv=dt.length;var dw=[];
|
38 |
+
for(du;du<dv;du+=dx){dw.push(dt.slice(du,du+dx))}return dw}function dp(du,dt){if(!cq(du)){return}if(!bJ){cT.push(du);return}aA=true;cK(function(){var dx=dd(du,50);var dv=0,dw;for(dv;dv<dx.length;dv++){dw='{"requests":["?'+dx[dv].join('","?')+'"],"send_image":0}';if(c5&&bc(dw,null,false)){cl(100)}else{de(dw,null,false)}}cl(dt)})}function aY(dt){return bq+dt+"."+cc+"."+bv}function b5(dv,du,dt){dn(dv,"",-129600000,du,dt)}function cb(){if(bs){return"0"}if(!M(W.showModalDialog)&&M(g.cookieEnabled)){return g.cookieEnabled?"1":"0"}var dt=bq+"testcookie";dn(dt,"1",undefined,bw,c7,bY,aN);var du=aH(dt)==="1"?"1":"0";b5(dt);return du}function bo(){bv=cd((c7||c2)+(bw||"/")).slice(0,4)}function cQ(){if(!c6){return{}}if(M(dh.res)){return dh}var du,dw,dx={pdf:"application/pdf",qt:"video/quicktime",realp:"audio/x-pn-realaudio-plugin",wma:"application/x-mplayer2",fla:"application/x-shockwave-flash",java:"application/x-java-vm",ag:"application/x-silverlight"};if(!((new RegExp("MSIE")).test(g.userAgent))){if(g.mimeTypes&&g.mimeTypes.length){for(du in dx){if(Object.prototype.hasOwnProperty.call(dx,du)){dw=g.mimeTypes[dx[du]];
|
39 |
+
dh[du]=(dw&&dw.enabledPlugin)?"1":"0"}}}if(!((new RegExp("Edge[ /](\\d+[\\.\\d]+)")).test(g.userAgent))&&typeof navigator.javaEnabled!=="unknown"&&M(g.javaEnabled)&&g.javaEnabled()){dh.java="1"}if(!M(W.showModalDialog)&&M(g.cookieEnabled)){dh.cookie=g.cookieEnabled?"1":"0"}else{dh.cookie=cb()}}var dv=parseInt(ab.width,10);var dt=parseInt(ab.height,10);dh.res=parseInt(dv,10)+"x"+parseInt(dt,10);return dh}function b3(){var du=aY("cvar"),dt=aH(du);if(dt&&dt.length){dt=W.JSON.parse(dt);if(Z(dt)){return dt}}return{}}function cN(){if(aV===false){aV=b3()}}function cZ(){var dt=cQ();return cd((g.userAgent||"")+(g.platform||"")+W.JSON.stringify(dt)+(new Date()).getTime()+Math.random()).slice(0,16)}function aF(){var dt=cQ();return cd((g.userAgent||"")+(g.platform||"")+W.JSON.stringify(dt)).slice(0,6)}function bl(){return Math.floor((new Date()).getTime()/1000)}function aO(){var du=bl();var dv=aF();var dt=String(du)+dv;return dt}function dc(dv){dv=String(dv);var dy=aF();var dw=dy.length;var dx=dv.substr(-1*dw,dw);
|
40 |
+
var du=parseInt(dv.substr(0,dv.length-dw),10);if(du&&dx&&dx===dy){var dt=bl();if(a5<=0){return true}if(dt>=du&&dt<=(du+a5)){return true}}return false}function dr(dt){if(!cV){return""}var dx=e(dt,az);if(!dx){return""}dx=String(dx);var dv=new RegExp("^[a-zA-Z0-9]+$");if(dx.length===32&&dv.test(dx)){var du=dx.substr(16,32);if(dc(du)){var dw=dx.substr(0,16);return dw}}return""}function cW(){if(!bU){bU=dr(bT)}var dv=new Date(),dt=Math.round(dv.getTime()/1000),du=aY("id"),dy=aH(du),dx,dw;if(dy){dx=dy.split(".");dx.unshift("0");if(bU.length){dx[1]=bU}return dx}if(bU.length){dw=bU}else{if("0"===cb()){dw=""}else{dw=cZ()}}dx=["1",dw,dt];return dx}function a4(){var dw=cW(),du=dw[0],dv=dw[1],dt=dw[2];return{newVisitor:du,uuid:dv,createTs:dt}}function aL(){var dw=new Date(),du=dw.getTime(),dx=a4().createTs;var dt=parseInt(dx,10);var dv=(dt*1000)+cS-du;return dv}function aR(dt){if(!cc){return}var dv=new Date(),du=Math.round(dv.getTime()/1000);if(!M(dt)){dt=a4()}var dw=dt.uuid+"."+dt.createTs+".";dn(aY("id"),dw,aL(),bw,c7,bY,aN)
|
41 |
+
}function bS(){var dt=aH(aY("ref"));if(dt.length){try{dt=W.JSON.parse(dt);if(Z(dt)){return dt}}catch(du){}}return["","",0,""]}function bD(dv){var du=bq+"testcookie_domain";var dt="testvalue";dn(du,dt,10000,null,dv,bY,aN);if(aH(du)===dt){b5(du,null,dv);return true}return false}function aJ(){var du=bs;bs=false;var dt,dv;for(dt=0;dt<bB.length;dt++){dv=aY(bB[dt]);if(dv!==cU&&dv!==bj&&0!==aH(dv)){b5(dv,bw,c7)}}bs=du}function b9(dt){cc=dt}function ds(dx){if(!dx||!Z(dx)){return}var dw=[];var dv;for(dv in dx){if(Object.prototype.hasOwnProperty.call(dx,dv)){dw.push(dv)}}var dy={};dw.sort();var dt=dw.length;var du;for(du=0;du<dt;du++){dy[dw[du]]=dx[dw[du]]}return dy}function ci(){dn(aY("ses"),"1",cu,bw,c7,bY,aN)}function bm(){var dw="";var du="abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";var dv=du.length;var dt;for(dt=0;dt<6;dt++){dw+=du.charAt(Math.floor(Math.random()*dv))}return dw}function aE(du){if(ct!==""){du+=ct;bn=true;return du}if(!h){return du}var dv=(typeof h.timing==="object")&&h.timing?h.timing:undefined;
|
42 |
+
if(!dv){dv=(typeof h.getEntriesByType==="function")&&h.getEntriesByType("navigation")?h.getEntriesByType("navigation")[0]:undefined}if(!dv){return du}var dt="";if(dv.connectEnd&&dv.fetchStart){if(dv.connectEnd<dv.fetchStart){return}dt+="&pf_net="+Math.round(dv.connectEnd-dv.fetchStart)}if(dv.responseStart&&dv.requestStart){if(dv.responseStart<dv.requestStart){return}dt+="&pf_srv="+Math.round(dv.responseStart-dv.requestStart)}if(dv.responseStart&&dv.responseEnd){if(dv.responseEnd<dv.responseStart){return}dt+="&pf_tfr="+Math.round(dv.responseEnd-dv.responseStart)}if(M(dv.domLoading)){if(dv.domInteractive&&dv.domLoading){if(dv.domInteractive<dv.domLoading){return}dt+="&pf_dm1="+Math.round(dv.domInteractive-dv.domLoading)}}else{if(dv.domInteractive&&dv.responseEnd){if(dv.domInteractive<dv.responseEnd){return}dt+="&pf_dm1="+Math.round(dv.domInteractive-dv.responseEnd)}}if(dv.domComplete&&dv.domInteractive){if(dv.domComplete<dv.domInteractive){return}dt+="&pf_dm2="+Math.round(dv.domComplete-dv.domInteractive)
|
43 |
+
}if(dv.loadEventEnd&&dv.loadEventStart){if(dv.loadEventEnd<dv.loadEventStart){return}dt+="&pf_onl="+Math.round(dv.loadEventEnd-dv.loadEventStart)}return du+dt}function cy(dv,dP,dQ){var dO,du=new Date(),dC=Math.round(du.getTime()/1000),dz,dM,dw=1024,dV,dD,dL=aV,dx=aY("ses"),dJ=aY("ref"),dG=aY("cvar"),dH=aH(dx),dN=bS(),dR=ba||bT,dA,dt;if(bs){aJ()}if(cY){return""}var dI=a4();var dF=J.characterSet||J.charset;if(!dF||dF.toLowerCase()==="utf-8"){dF=null}dA=dN[0];dt=dN[1];dz=dN[2];dM=dN[3];if(!dH){if(!bC||!dA.length){for(dO in cw){if(Object.prototype.hasOwnProperty.call(cw,dO)){dA=e(dR,cw[dO]);if(dA.length){break}}}for(dO in bN){if(Object.prototype.hasOwnProperty.call(bN,dO)){dt=e(dR,bN[dO]);if(dt.length){break}}}}dV=d(bu);dD=dM.length?d(dM):"";if(dV.length&&!a1(dV)&&(!bC||!dD.length||a1(dD))){dM=bu}if(dM.length||dA.length){dz=dC;dN=[dA,dt,dz,b8(dM.slice(0,dw))];dn(dJ,W.JSON.stringify(dN),df,bw,c7,bY,aN)}}dv+="&idsite="+cc+"&rec=1&r="+String(Math.random()).slice(2,8)+"&h="+du.getHours()+"&m="+du.getMinutes()+"&s="+du.getSeconds()+"&url="+t(b8(dR))+(bu.length?"&urlref="+t(b8(bu)):"")+(ac(bF)?"&uid="+t(bF):"")+"&_id="+dI.uuid+"&_idn="+dI.newVisitor+(dA.length?"&_rcn="+t(dA):"")+(dt.length?"&_rck="+t(dt):"")+"&_refts="+dz+(String(dM).length?"&_ref="+t(b8(dM.slice(0,dw))):"")+(dF?"&cs="+t(dF):"")+"&send_image=0";
|
44 |
+
var dU=cQ();for(dO in dU){if(Object.prototype.hasOwnProperty.call(dU,dO)){dv+="&"+dO+"="+dU[dO]}}var dT=[];if(dP){for(dO in dP){if(Object.prototype.hasOwnProperty.call(dP,dO)&&/^dimension\d+$/.test(dO)){var dy=dO.replace("dimension","");dT.push(parseInt(dy,10));dT.push(String(dy));dv+="&"+dO+"="+t(dP[dO]);delete dP[dO]}}}if(dP&&D(dP)){dP=null}for(dO in cA){if(Object.prototype.hasOwnProperty.call(cA,dO)){dv+="&"+dO+"="+t(cA[dO])}}for(dO in bt){if(Object.prototype.hasOwnProperty.call(bt,dO)){var dE=(-1===P(dT,dO));if(dE){dv+="&dimension"+dO+"="+t(bt[dO])}}}if(dP){dv+="&data="+t(W.JSON.stringify(dP))}else{if(at){dv+="&data="+t(W.JSON.stringify(at))}}function dB(dW,dX){var dY=W.JSON.stringify(dW);if(dY.length>2){return"&"+dX+"="+t(dY)}return""}var dS=ds(b2);var dK=ds(cs);dv+=dB(dS,"cvar");dv+=dB(dK,"e_cvar");if(aV){dv+=dB(aV,"_cvar");for(dO in dL){if(Object.prototype.hasOwnProperty.call(dL,dO)){if(aV[dO][0]===""||aV[dO][1]===""){delete aV[dO]}}}if(bW){dn(dG,W.JSON.stringify(aV),cu,bw,c7,bY,aN)
|
45 |
+
}}if(a8&&bL&&!bn){dv=aE(dv);bn=true}if(aQ){dv+="&pv_id="+aQ}aR(dI);ci();dv+=ag(dQ,{tracker:bP,request:dv});if(c9.length){dv+="&"+c9}if(C(ch)){dv=ch(dv)}return dv}bX=function bd(){var dt=new Date();dt=dt.getTime();if(!c8){return false}if(c8+bb<=dt){bP.ping();return true}return false};function bx(dw,dv,dA,dx,dt,dD){var dz="idgoal=0",du=new Date(),dB=[],dC,dy=String(dw).length;if(dy){dz+="&ec_id="+t(dw)}dz+="&revenue="+dv;if(String(dA).length){dz+="&ec_st="+dA}if(String(dx).length){dz+="&ec_tx="+dx}if(String(dt).length){dz+="&ec_sh="+dt}if(String(dD).length){dz+="&ec_dt="+dD}if(da){for(dC in da){if(Object.prototype.hasOwnProperty.call(da,dC)){if(!M(da[dC][1])){da[dC][1]=""}if(!M(da[dC][2])){da[dC][2]=""}if(!M(da[dC][3])||String(da[dC][3]).length===0){da[dC][3]=0}if(!M(da[dC][4])||String(da[dC][4]).length===0){da[dC][4]=1}dB.push(da[dC])}}dz+="&ec_items="+t(W.JSON.stringify(dB))}dz=cy(dz,at,"ecommerce");bM(dz,bQ);if(dy){da={}}}function b4(dt,dx,dw,dv,du,dy){if(String(dt).length&&M(dx)){bx(dt,dx,dw,dv,du,dy)
|
46 |
+
}}function bz(dt){if(M(dt)){bx("",dt,"","","","")}}function b6(du,dw,dv){if(!bH){aQ=bm()}var dt=cy("action_name="+t(ap(du||bp)),dw,"log");if(a8&&!bn){dt=aE(dt)}bM(dt,bQ,dv)}function a6(dv,du){var dw,dt="(^| )(piwik[_-]"+du+"|matomo[_-]"+du;if(dv){for(dw=0;dw<dv.length;dw++){dt+="|"+dv[dw]}}dt+=")( |$)";return new RegExp(dt)}function aZ(dt){return(aI&&dt&&0===String(dt).indexOf(aI))}function cC(dx,dt,dy,du){if(aZ(dt)){return 0}var dw=a6(bR,"download"),dv=a6(be,"link"),dz=new RegExp("\\.("+dg.join("|")+")([?&#]|$)","i");if(dv.test(dx)){return"link"}if(du||dw.test(dx)||dz.test(dt)){return"download"}if(dy){return 0}return"link"}function ay(du){var dt;dt=du.parentNode;while(dt!==null&&M(dt)){if(ai.isLinkElement(du)){break}du=dt;dt=du.parentNode}return du}function dl(dy){dy=ay(dy);if(!ai.hasNodeAttribute(dy,"href")){return}if(!M(dy.href)){return}var dx=ai.getAttributeValueFromNode(dy,"href");var du=dy.pathname||cr(dy.href);var dz=dy.hostname||d(dy.href);var dA=dz.toLowerCase();var dv=dy.href.replace(dz,dA);
|
47 |
+
var dw=new RegExp("^(javascript|vbscript|jscript|mocha|livescript|ecmascript|mailto|tel):","i");if(!dw.test(dv)){var dt=cC(dy.className,dv,aw(dA,du),ai.hasNodeAttribute(dy,"download"));if(dt){return{type:dt,href:dv}}}}function aU(dt,du,dv,dw){var dx=w.buildInteractionRequestParams(dt,du,dv,dw);if(!dx){return}return cy(dx,null,"contentInteraction")}function bh(dt,du){if(!dt||!du){return false}var dv=w.findTargetNode(dt);if(w.shouldIgnoreInteraction(dv)){return false}dv=w.findTargetNodeNoDefault(dt);if(dv&&!Y(dv,du)){return false}return true}function cB(dv,du,dx){if(!dv){return}var dt=w.findParentContentNode(dv);if(!dt){return}if(!bh(dt,dv)){return}var dw=w.buildContentBlock(dt);if(!dw){return}if(!dw.target&&dx){dw.target=dx}return w.buildInteractionRequestParams(du,dw.name,dw.piece,dw.target)}function a2(du){if(!cg||!cg.length){return false}var dt,dv;for(dt=0;dt<cg.length;dt++){dv=cg[dt];if(dv&&dv.name===du.name&&dv.piece===du.piece&&dv.target===du.target){return true}}return false}function a3(dt){return function(dx){if(!dt){return
|
48 |
+
}var dv=w.findParentContentNode(dt);var du;if(dx){du=dx.target||dx.srcElement}if(!du){du=dt}if(!bh(dv,du)){return}if(!dv){return false}var dy=w.findTargetNode(dv);if(!dy||w.shouldIgnoreInteraction(dy)){return false}var dw=dl(dy);if(di&&dw&&dw.type){return dw.type}return bP.trackContentInteractionNode(du,"click")}}function b7(dv){if(!dv||!dv.length){return}var dt,du;for(dt=0;dt<dv.length;dt++){du=w.findTargetNode(dv[dt]);if(du&&!du.contentInteractionTrackingSetupDone){du.contentInteractionTrackingSetupDone=true;ar(du,"click",a3(du))}}}function bE(dv,dw){if(!dv||!dv.length){return[]}var dt,du;for(dt=0;dt<dv.length;dt++){if(a2(dv[dt])){dv.splice(dt,1);dt--}else{cg.push(dv[dt])}}if(!dv||!dv.length){return[]}b7(dw);var dx=[];for(dt=0;dt<dv.length;dt++){du=cy(w.buildImpressionRequestParams(dv[dt].name,dv[dt].piece,dv[dt].target),undefined,"contentImpressions");if(du){dx.push(du)}}return dx}function cH(du){var dt=w.collectContent(du);return bE(dt,du)}function bf(du){if(!du||!du.length){return[]
|
49 |
+
}var dt;for(dt=0;dt<du.length;dt++){if(!w.isNodeVisible(du[dt])){du.splice(dt,1);dt--}}if(!du||!du.length){return[]}return cH(du)}function aK(dv,dt,du){var dw=w.buildImpressionRequestParams(dv,dt,du);return cy(dw,null,"contentImpression")}function dk(dw,du){if(!dw){return}var dt=w.findParentContentNode(dw);var dv=w.buildContentBlock(dt);if(!dv){return}if(!du){du="Unknown"}return aU(du,dv.name,dv.piece,dv.target)}function cX(du,dw,dt,dv){return"e_c="+t(du)+"&e_a="+t(dw)+(M(dt)?"&e_n="+t(dt):"")+(M(dv)?"&e_v="+t(dv):"")+"&ca=1"}function ax(dv,dx,dt,dw,dz,dy){if(!ac(dv)||!ac(dx)){ao("Error while logging event: Parameters `category` and `action` must not be empty or filled with whitespaces");return false}var du=cy(cX(dv,dx,dt,dw),dz,"event");bM(du,bQ,dy)}function ce(dt,dw,du,dx){var dv=cy("search="+t(dt)+(dw?"&search_cat="+t(dw):"")+(M(du)?"&search_count="+du:""),dx,"sitesearch");bM(dv,bQ)}function c1(dt,dx,dw,dv){var du=cy("idgoal="+dt+(dx?"&revenue="+dx:""),dw,"goal");bM(du,bQ,dv)}function db(dw,dt,dA,dz,dv){var dy=dt+"="+t(b8(dw));
|
50 |
+
var du=cB(dv,"click",dw);if(du){dy+="&"+du}var dx=cy(dy,dA,"link");bM(dx,bQ,dz)}function b0(du,dt){if(du!==""){return du+dt.charAt(0).toUpperCase()+dt.slice(1)}return dt}function cm(dy){var dx,dt,dw=["","webkit","ms","moz"],dv;if(!bk){for(dt=0;dt<dw.length;dt++){dv=dw[dt];if(Object.prototype.hasOwnProperty.call(J,b0(dv,"hidden"))){if(J[b0(dv,"visibilityState")]==="prerender"){dx=true}break}}}if(dx){ar(J,dv+"visibilitychange",function du(){J.removeEventListener(dv+"visibilitychange",du,false);dy()});return}dy()}function by(){var du=bP.getVisitorId();var dt=aO();return du+dt}function cp(dt){if(!dt){return}if(!ai.hasNodeAttribute(dt,"href")){return}var du=ai.getAttributeValueFromNode(dt,"href");if(!du||aZ(du)){return}if(!bP.getVisitorId()){return}du=j(du,az);var dv=by();du=I(du,az,dv);ai.setAnyAttribute(dt,"href",du)}function br(dw){var dx=ai.getAttributeValueFromNode(dw,"href");if(!dx){return false}dx=String(dx);var du=dx.indexOf("//")===0||dx.indexOf("http://")===0||dx.indexOf("https://")===0;
|
51 |
+
if(!du){return false}var dt=dw.pathname||cr(dw.href);var dv=(dw.hostname||d(dw.href)).toLowerCase();if(aw(dv,dt)){if(!cP(c2,O(dv))){return true}return false}return false}function cO(dt){var du=dl(dt);if(du&&du.type){du.href=p(du.href);db(du.href,du.type,undefined,null,dt);return}if(cV){dt=ay(dt);if(br(dt)){cp(dt)}}}function cD(){return J.all&&!J.addEventListener}function c3(dt){var dv=dt.which;var du=(typeof dt.button);if(!dv&&du!=="undefined"){if(cD()){if(dt.button&1){dv=1}else{if(dt.button&2){dv=3}else{if(dt.button&4){dv=2}}}}else{if(dt.button===0||dt.button==="0"){dv=1}else{if(dt.button&1){dv=2}else{if(dt.button&2){dv=3}}}}}return dv}function bZ(dt){switch(c3(dt)){case 1:return"left";case 2:return"middle";case 3:return"right"}}function a7(dt){return dt.target||dt.srcElement}function c4(dt){return dt==="A"||dt==="AREA"}function aG(dt){function du(dw){var dx=a7(dw);var dy=dx.nodeName;var dv=a6(bG,"ignore");while(!c4(dy)&&dx&&dx.parentNode){dx=dx.parentNode;dy=dx.nodeName}if(dx&&c4(dy)&&!dv.test(dx.className)){return dx
|
52 |
+
}}return function(dx){dx=dx||W.event;var dy=du(dx);if(!dy){return}var dw=bZ(dx);if(dx.type==="click"){var dv=false;if(dt&&dw==="middle"){dv=true}if(dy&&!dv){cO(dy)}}else{if(dx.type==="mousedown"){if(dw==="middle"&&dy){aW=dw;bI=dy}else{aW=bI=null}}else{if(dx.type==="mouseup"){if(dw===aW&&dy===bI){cO(dy)}aW=bI=null}else{if(dx.type==="contextmenu"){cO(dy)}}}}}}function av(dw,dv,dt){var du=typeof dv;if(du==="undefined"){dv=true}ar(dw,"click",aG(dv),dt);if(dv){ar(dw,"mouseup",aG(dv),dt);ar(dw,"mousedown",aG(dv),dt);ar(dw,"contextmenu",aG(dv),dt)}}function aX(du,dx,dy){if(ck){return true}ck=true;var dz=false;var dw,dv;function dt(){dz=true}n(function(){function dA(dC){setTimeout(function(){if(!ck){return}dz=false;dy.trackVisibleContentImpressions();dA(dC)},dC)}function dB(dC){setTimeout(function(){if(!ck){return}if(dz){dz=false;dy.trackVisibleContentImpressions()}dB(dC)},dC)}if(du){dw=["scroll","resize"];for(dv=0;dv<dw.length;dv++){if(J.addEventListener){J.addEventListener(dw[dv],dt,false)}else{W.attachEvent("on"+dw[dv],dt)
|
53 |
+
}}dB(100)}if(dx&&dx>0){dx=parseInt(dx,10);dA(dx)}})}var bK={enabled:true,requests:[],timeout:null,interval:2500,sendRequests:function(){var dt=this.requests;this.requests=[];if(dt.length===1){bM(dt[0],bQ)}else{dp(dt,bQ)}},canQueue:function(){return !m&&this.enabled},pushMultiple:function(du){if(!this.canQueue()){dp(du,bQ);return}var dt;for(dt=0;dt<du.length;dt++){this.push(du[dt])}},push:function(dt){if(!dt){return}if(!this.canQueue()){bM(dt,bQ);return}bK.requests.push(dt);if(this.timeout){clearTimeout(this.timeout);this.timeout=null}this.timeout=setTimeout(function(){bK.timeout=null;bK.sendRequests()},bK.interval);var du="RequestQueue"+aB;if(!Object.prototype.hasOwnProperty.call(b,du)){b[du]={unload:function(){if(bK.timeout){clearTimeout(bK.timeout)}bK.sendRequests()}}}}};bo();this.hasConsent=function(){return bJ};this.getVisitorInfo=function(){if(!aH(aY("id"))){aR()}return cW()};this.getVisitorId=function(){return this.getVisitorInfo()[1]};this.getAttributionInfo=function(){return bS()
|
54 |
+
};this.getAttributionCampaignName=function(){return bS()[0]};this.getAttributionCampaignKeyword=function(){return bS()[1]};this.getAttributionReferrerTimestamp=function(){return bS()[2]};this.getAttributionReferrerUrl=function(){return bS()[3]};this.setTrackerUrl=function(dt){aI=dt};this.getTrackerUrl=function(){return aI};this.getMatomoUrl=function(){return aa(this.getTrackerUrl(),bO)};this.getPiwikUrl=function(){return this.getMatomoUrl()};this.addTracker=function(dv,du){if(!M(dv)||null===dv){dv=this.getTrackerUrl()}var dt=new T(dv,du);L.push(dt);u.trigger("TrackerAdded",[this]);return dt};this.getSiteId=function(){return cc};this.setSiteId=function(dt){b9(dt)};this.resetUserId=function(){bF=""};this.setUserId=function(dt){if(ac(dt)){bF=dt}};this.setVisitorId=function(du){var dt=/[0-9A-Fa-f]{16}/g;if(x(du)&&dt.test(du)){bU=du}else{ao("Invalid visitorId set"+du)}};this.getUserId=function(){return bF};this.setCustomData=function(dt,du){if(Z(dt)){at=dt}else{if(!at){at={}}at[dt]=du}};this.getCustomData=function(){return at
|
55 |
+
};this.setCustomRequestProcessing=function(dt){ch=dt};this.appendToTrackingUrl=function(dt){c9=dt};this.getRequest=function(dt){return cy(dt)};this.addPlugin=function(dt,du){b[dt]=du};this.setCustomDimension=function(dt,du){dt=parseInt(dt,10);if(dt>0){if(!M(du)){du=""}if(!x(du)){du=String(du)}bt[dt]=du}};this.getCustomDimension=function(dt){dt=parseInt(dt,10);if(dt>0&&Object.prototype.hasOwnProperty.call(bt,dt)){return bt[dt]}};this.deleteCustomDimension=function(dt){dt=parseInt(dt,10);if(dt>0){delete bt[dt]}};this.setCustomVariable=function(du,dt,dx,dv){var dw;if(!M(dv)){dv="visit"}if(!M(dt)){return}if(!M(dx)){dx=""}if(du>0){dt=!x(dt)?String(dt):dt;dx=!x(dx)?String(dx):dx;dw=[dt.slice(0,bA),dx.slice(0,bA)];if(dv==="visit"||dv===2){cN();aV[du]=dw}else{if(dv==="page"||dv===3){b2[du]=dw}else{if(dv==="event"){cs[du]=dw}}}}};this.getCustomVariable=function(du,dv){var dt;if(!M(dv)){dv="visit"}if(dv==="page"||dv===3){dt=b2[du]}else{if(dv==="event"){dt=cs[du]}else{if(dv==="visit"||dv===2){cN();
|
56 |
+
dt=aV[du]}}}if(!M(dt)||(dt&&dt[0]==="")){return false}return dt};this.deleteCustomVariable=function(dt,du){if(this.getCustomVariable(dt,du)){this.setCustomVariable(dt,"","",du)}};this.deleteCustomVariables=function(dt){if(dt==="page"||dt===3){b2={}}else{if(dt==="event"){cs={}}else{if(dt==="visit"||dt===2){aV={}}}}};this.storeCustomVariablesInCookie=function(){bW=true};this.setLinkTrackingTimer=function(dt){bQ=dt};this.getLinkTrackingTimer=function(){return bQ};this.setDownloadExtensions=function(dt){if(x(dt)){dt=dt.split("|")}dg=dt};this.addDownloadExtensions=function(du){var dt;if(x(du)){du=du.split("|")}for(dt=0;dt<du.length;dt++){dg.push(du[dt])}};this.removeDownloadExtensions=function(dv){var du,dt=[];if(x(dv)){dv=dv.split("|")}for(du=0;du<dg.length;du++){if(P(dv,dg[du])===-1){dt.push(dg[du])}}dg=dt};this.setDomains=function(dt){aC=x(dt)?[dt]:dt;var dx=false,dv=0,du;for(dv;dv<aC.length;dv++){du=String(aC[dv]);if(cP(c2,O(du))){dx=true;break}var dw=cr(du);if(dw&&dw!=="/"&&dw!=="/*"){dx=true;
|
57 |
+
break}}if(!dx){aC.push(c2)}};this.enableCrossDomainLinking=function(){cV=true};this.disableCrossDomainLinking=function(){cV=false};this.isCrossDomainLinkingEnabled=function(){return cV};this.setCrossDomainLinkingTimeout=function(dt){a5=dt};this.getCrossDomainLinkingUrlParameter=function(){return t(az)+"="+t(by())};this.setIgnoreClasses=function(dt){bG=x(dt)?[dt]:dt};this.setRequestMethod=function(dt){if(dt){dj=String(dt).toUpperCase()}else{dj=cn}if(dj==="GET"){this.disableAlwaysUseSendBeacon()}};this.setRequestContentType=function(dt){cE=dt||aM};this.setGenerationTimeMs=function(dt){ao("setGenerationTimeMs is no longer supported since Matomo 4. The call will be ignored. The replacement is setPagePerformanceTiming.")};this.setPagePerformanceTiming=function(dx,dz,dy,du,dA,dv){var dw={pf_net:dx,pf_srv:dz,pf_tfr:dy,pf_dm1:du,pf_dm2:dA,pf_onl:dv};try{dw=Q(dw,M);dw=B(dw);ct=l(dw);if(ct===""){ao("setPagePerformanceTiming() called without parameters. This function needs to be called with at least one performance parameter.");
|
58 |
+
return}bn=false;bL=true}catch(dt){ao("setPagePerformanceTiming: "+dt.toString())}};this.setReferrerUrl=function(dt){bu=dt};this.setCustomUrl=function(dt){ba=b1(bT,dt)};this.getCurrentUrl=function(){return ba||bT};this.setDocumentTitle=function(dt){bp=dt};this.setPageViewId=function(dt){aQ=dt;bH=true};this.setAPIUrl=function(dt){bO=dt};this.setDownloadClasses=function(dt){bR=x(dt)?[dt]:dt};this.setLinkClasses=function(dt){be=x(dt)?[dt]:dt};this.setCampaignNameKey=function(dt){cw=x(dt)?[dt]:dt};this.setCampaignKeywordKey=function(dt){bN=x(dt)?[dt]:dt};this.discardHashTag=function(dt){bV=dt};this.setCookieNamePrefix=function(dt){bq=dt;if(aV){aV=b3()}};this.setCookieDomain=function(dt){var du=O(dt);if(!bs&&!bD(du)){ao("Can't write cookie on domain "+dt)}else{c7=du;bo()}};this.setExcludedQueryParams=function(dt){co=x(dt)?[dt]:dt};this.getCookieDomain=function(){return c7};this.hasCookies=function(){return"1"===cb()};this.setSessionCookie=function(dv,du,dt){if(!dv){throw new Error("Missing cookie name")
|
59 |
+
}if(!M(dt)){dt=cu}bB.push(dv);dn(aY(dv),du,dt,bw,c7,bY,aN)};this.getCookie=function(du){var dt=aH(aY(du));if(dt===0){return null}return dt};this.setCookiePath=function(dt){bw=dt;bo()};this.getCookiePath=function(dt){return bw};this.setVisitorCookieTimeout=function(dt){cS=dt*1000};this.setSessionCookieTimeout=function(dt){cu=dt*1000};this.getSessionCookieTimeout=function(){return cu};this.setReferralCookieTimeout=function(dt){df=dt*1000};this.setConversionAttributionFirstReferrer=function(dt){bC=dt};this.setSecureCookie=function(dt){if(dt&&location.protocol!=="https:"){ao("Error in setSecureCookie: You cannot use `Secure` on http.");return}bY=dt};this.setCookieSameSite=function(dt){dt=String(dt);dt=dt.charAt(0).toUpperCase()+dt.toLowerCase().slice(1);if(dt!=="None"&&dt!=="Lax"&&dt!=="Strict"){ao("Ignored value for sameSite. Please use either Lax, None, or Strict.");return}if(dt==="None"){if(location.protocol==="https:"){this.setSecureCookie(true)}else{ao("sameSite=None cannot be used on http, reverted to sameSite=Lax.");
|
60 |
+
dt="Lax"}}aN=dt};this.disableCookies=function(){bs=true;if(cc){aJ()}};this.areCookiesEnabled=function(){return !bs};this.setCookieConsentGiven=function(){if(bs&&!cY){bs=false;c6=true;if(cc&&aA){aR();var dt=cy("ping=1",null,"ping");bM(dt,bQ)}}};this.requireCookieConsent=function(){if(this.getRememberedCookieConsent()){return false}this.disableCookies();return true};this.getRememberedCookieConsent=function(){return aH(cL)};this.forgetCookieConsentGiven=function(){b5(cL,bw,c7);this.disableCookies()};this.rememberCookieConsentGiven=function(du){if(du){du=du*60*60*1000}else{du=30*365*24*60*60*1000}this.setCookieConsentGiven();var dt=new Date().getTime();dn(cL,dt,du,bw,c7,bY,aN)};this.deleteCookies=function(){aJ()};this.setDoNotTrack=function(du){var dt=g.doNotTrack||g.msDoNotTrack;cY=du&&(dt==="yes"||dt==="1");if(cY){this.disableCookies()}};this.alwaysUseSendBeacon=function(){c5=true};this.disableAlwaysUseSendBeacon=function(){c5=false};this.addListener=function(du,dt){av(du,dt,false)};this.enableLinkTracking=function(du){if(di){return
|
61 |
+
}di=true;var dt=this;q(function(){au=true;var dv=J.body;av(dv,du,true)})};this.enableJSErrorTracking=function(){if(c0){return}c0=true;var dt=W.onerror;W.onerror=function(dy,dw,dv,dx,du){cm(function(){var dz="JavaScript Errors";var dA=dw+":"+dv;if(dx){dA+=":"+dx}if(P(cz,dz+dA+dy)===-1){cz.push(dz+dA+dy);ax(dz,dA,dy)}});if(dt){return dt(dy,dw,dv,dx,du)}return false}};this.disablePerformanceTracking=function(){a8=false};this.enableHeartBeatTimer=function(dt){dt=Math.max(dt||15,5);bb=dt*1000;if(c8!==null){dq()}};this.disableHeartBeatTimer=function(){if(bb||aS){if(W.removeEventListener){W.removeEventListener("focus",bg);W.removeEventListener("blur",aD);W.removeEventListener("visibilitychange",a0)}else{if(W.detachEvent){W.detachEvent("onfocus",bg);W.detachEvent("onblur",aD);W.detachEvent("visibilitychange",a0)}}}bb=null;aS=false};this.killFrame=function(){if(W.location!==W.top.location){W.top.location=W.location}};this.redirectFile=function(dt){if(W.location.protocol==="file:"){W.location=dt}};
|
62 |
+
this.setCountPreRendered=function(dt){bk=dt};this.trackGoal=function(dt,dw,dv,du){cm(function(){c1(dt,dw,dv,du)})};this.trackLink=function(du,dt,dw,dv){cm(function(){db(du,dt,dw,dv)})};this.getNumTrackedPageViews=function(){return cx};this.trackPageView=function(dt,dv,du){cg=[];cT=[];cz=[];if(R(cc)){cm(function(){ad(aI,bO,cc)})}else{cm(function(){cx++;b6(dt,dv,du)})}};this.disableBrowserFeatureDetection=function(){c6=false};this.enableBrowserFeatureDetection=function(){c6=true};this.trackAllContentImpressions=function(){if(R(cc)){return}cm(function(){q(function(){var dt=w.findContentNodes();var du=cH(dt);bK.pushMultiple(du)})})};this.trackVisibleContentImpressions=function(dt,du){if(R(cc)){return}if(!M(dt)){dt=true}if(!M(du)){du=750}aX(dt,du,this);cm(function(){n(function(){var dv=w.findContentNodes();var dw=bf(dv);bK.pushMultiple(dw)})})};this.trackContentImpression=function(dv,dt,du){if(R(cc)){return}dv=a(dv);dt=a(dt);du=a(du);if(!dv){return}dt=dt||"Unknown";cm(function(){var dw=aK(dv,dt,du);
|
63 |
+
bK.push(dw)})};this.trackContentImpressionsWithinNode=function(dt){if(R(cc)||!dt){return}cm(function(){if(ck){n(function(){var du=w.findContentNodesWithinNode(dt);var dv=bf(du);bK.pushMultiple(dv)})}else{q(function(){var du=w.findContentNodesWithinNode(dt);var dv=cH(du);bK.pushMultiple(dv)})}})};this.trackContentInteraction=function(dv,dw,dt,du){if(R(cc)){return}dv=a(dv);dw=a(dw);dt=a(dt);du=a(du);if(!dv||!dw){return}dt=dt||"Unknown";cm(function(){var dx=aU(dv,dw,dt,du);if(dx){bK.push(dx)}})};this.trackContentInteractionNode=function(dv,du){if(R(cc)||!dv){return}var dt=null;cm(function(){dt=dk(dv,du);if(dt){bK.push(dt)}});return dt};this.logAllContentBlocksOnPage=function(){var dv=w.findContentNodes();var dt=w.collectContent(dv);var du=typeof console;if(du!=="undefined"&&console&&console.log){console.log(dt)}};this.trackEvent=function(du,dw,dt,dv,dy,dx){cm(function(){ax(du,dw,dt,dv,dy,dx)})};this.trackSiteSearch=function(dt,dv,du,dw){cg=[];cm(function(){ce(dt,dv,du,dw)})};this.setEcommerceView=function(dx,dt,dv,du){cA={};
|
64 |
+
if(ac(dv)){dv=String(dv)}if(!M(dv)||dv===null||dv===false||!dv.length){dv=""}else{if(dv instanceof Array){dv=W.JSON.stringify(dv)}}var dw="_pkc";cA[dw]=dv;if(M(du)&&du!==null&&du!==false&&String(du).length){dw="_pkp";cA[dw]=du}if(!ac(dx)&&!ac(dt)){return}if(ac(dx)){dw="_pks";cA[dw]=dx}if(!ac(dt)){dt=""}dw="_pkn";cA[dw]=dt};this.getEcommerceItems=function(){return JSON.parse(JSON.stringify(da))};this.addEcommerceItem=function(dx,dt,dv,du,dw){if(ac(dx)){da[dx]=[String(dx),dt,dv,du,dw]}};this.removeEcommerceItem=function(dt){if(ac(dt)){dt=String(dt);delete da[dt]}};this.clearEcommerceCart=function(){da={}};this.trackEcommerceOrder=function(dt,dx,dw,dv,du,dy){b4(dt,dx,dw,dv,du,dy)};this.trackEcommerceCartUpdate=function(dt){bz(dt)};this.trackRequest=function(du,dw,dv,dt){cm(function(){var dx=cy(du,dw,dt);bM(dx,bQ,dv)})};this.ping=function(){this.trackRequest("ping=1",null,null,"ping")};this.disableQueueRequest=function(){bK.enabled=false};this.setRequestQueueInterval=function(dt){if(dt<1000){throw new Error("Request queue interval needs to be at least 1000ms")
|
65 |
+
}bK.interval=dt};this.queueRequest=function(dt){cm(function(){var du=cy(dt);bK.push(du)})};this.isConsentRequired=function(){return cI};this.getRememberedConsent=function(){var dt=aH(bj);if(aH(cU)){if(dt){b5(bj,bw,c7)}return null}if(!dt||dt===0){return null}return dt};this.hasRememberedConsent=function(){return !!this.getRememberedConsent()};this.requireConsent=function(){cI=true;bJ=this.hasRememberedConsent();if(!bJ){bs=true}y++;b["CoreConsent"+y]={unload:function(){if(!bJ){aJ()}}}};this.setConsentGiven=function(du){bJ=true;c6=true;b5(cU,bw,c7);var dv,dt;for(dv=0;dv<cT.length;dv++){dt=typeof cT[dv];if(dt==="string"){bM(cT[dv],bQ)}else{if(dt==="object"){dp(cT[dv],bQ)}}}cT=[];if(!M(du)||du){this.setCookieConsentGiven()}};this.rememberConsentGiven=function(dv){if(dv){dv=dv*60*60*1000}else{dv=30*365*24*60*60*1000}var dt=true;this.setConsentGiven(dt);var du=new Date().getTime();dn(bj,du,dv,bw,c7,bY,aN)};this.forgetConsentGiven=function(){var dt=30*365*24*60*60*1000;b5(bj,bw,c7);dn(cU,new Date().getTime(),dt,bw,c7,bY,aN);
|
66 |
+
this.forgetCookieConsentGiven();this.requireConsent()};this.isUserOptedOut=function(){return !bJ};this.optUserOut=this.forgetConsentGiven;this.forgetUserOptOut=function(){this.setConsentGiven(false)};n(function(){setTimeout(function(){bL=true},0)});u.trigger("TrackerSetup",[this]);u.addPlugin("TrackerVisitorIdCookie"+aB,{unload:function(){if(!aA){aR()}}})}function K(){return{push:aj}}function c(ay,ax){var az={};var av,aw;for(av=0;av<ax.length;av++){var at=ax[av];az[at]=1;for(aw=0;aw<ay.length;aw++){if(ay[aw]&&ay[aw][0]){var au=ay[aw][0];if(at===au){aj(ay[aw]);delete ay[aw];if(az[au]>1&&au!=="addTracker"&&au!=="enableLinkTracking"){ao("The method "+au+' is registered more than once in "_paq" variable. Only the last call has an effect. Please have a look at the multiple Matomo trackers documentation: https://developer.matomo.org/guides/tracking-javascript-guide#multiple-piwik-trackers')}az[au]++}}}}return ay}var E=["addTracker","forgetCookieConsentGiven","requireCookieConsent","disableBrowserFeatureDetection","disableCookies","setTrackerUrl","setAPIUrl","enableCrossDomainLinking","setCrossDomainLinkingTimeout","setSessionCookieTimeout","setVisitorCookieTimeout","setCookieNamePrefix","setCookieSameSite","setSecureCookie","setCookiePath","setCookieDomain","setDomains","setUserId","setVisitorId","setSiteId","alwaysUseSendBeacon","disableAlwaysUseSendBeacon","enableLinkTracking","setCookieConsentGiven","requireConsent","setConsentGiven","disablePerformanceTracking","setPagePerformanceTiming","setExcludedQueryParams"];
|
67 |
+
function ah(av,au){var at=new T(av,au);L.push(at);_paq=c(_paq,E);for(H=0;H<_paq.length;H++){if(_paq[H]){aj(_paq[H])}}_paq=new K();u.trigger("TrackerAdded",[at]);return at}ar(W,"beforeunload",am,false);ar(W,"visibilitychange",function(){if(m){return}if(J.visibilityState==="hidden"){ag("unload")}},false);ar(W,"online",function(){if(M(g.serviceWorker)){g.serviceWorker.ready.then(function(at){if(at&&at.sync){return at.sync.register("matomoSync")}},function(){})}},false);ar(W,"message",function(ay){if(!ay||!ay.origin){return}var aA,aw,au;var aB=d(ay.origin);var ax=u.getAsyncTrackers();for(aw=0;aw<ax.length;aw++){au=d(ax[aw].getMatomoUrl());if(au===aB){aA=ax[aw];break}}if(!aA){return}var av=null;try{av=JSON.parse(ay.data)}catch(az){return}if(!av){return}function at(aE){var aG=J.getElementsByTagName("iframe");for(aw=0;aw<aG.length;aw++){var aF=aG[aw];var aC=d(aF.src);if(aF.contentWindow&&M(aF.contentWindow.postMessage)&&aC===aB){var aD=JSON.stringify(aE);aF.contentWindow.postMessage(aD,"*")}}}if(M(av.maq_initial_value)){at({maq_opted_in:av.maq_initial_value&&aA.hasConsent(),maq_url:aA.getMatomoUrl(),maq_optout_by_default:aA.isConsentRequired()})
|
68 |
}else{if(M(av.maq_opted_in)){ax=u.getAsyncTrackers();for(aw=0;aw<ax.length;aw++){aA=ax[aw];if(av.maq_opted_in){aA.rememberConsentGiven()}else{aA.forgetConsentGiven()}}at({maq_confirm_opted_in:aA.hasConsent(),maq_url:aA.getMatomoUrl(),maq_optout_by_default:aA.isConsentRequired()})}}},false);Date.prototype.getTimeAlias=Date.prototype.getTime;u={initialized:false,JSON:W.JSON,DOM:{addEventListener:function(aw,av,au,at){var ax=typeof at;if(ax==="undefined"){at=false}ar(aw,av,au,at)},onLoad:n,onReady:q,isNodeVisible:i,isOrWasNodeVisible:w.isNodeVisible},on:function(au,at){if(!z[au]){z[au]=[]}z[au].push(at)},off:function(av,au){if(!z[av]){return}var at=0;for(at;at<z[av].length;at++){if(z[av][at]===au){z[av].splice(at,1)}}},trigger:function(av,aw,au){if(!z[av]){return}var at=0;for(at;at<z[av].length;at++){z[av][at].apply(au||W,aw)}},addPlugin:function(at,au){b[at]=au},getTracker:function(au,at){if(!M(at)){at=this.getAsyncTracker().getSiteId()}if(!M(au)){au=this.getAsyncTracker().getTrackerUrl()
|
69 |
}return new T(au,at)},getAsyncTrackers:function(){return L},addTracker:function(av,au){var at;if(!L.length){at=ah(av,au)}else{at=L[0].addTracker(av,au)}return at},getAsyncTracker:function(ax,aw){var av;if(L&&L.length&&L[0]){av=L[0]}else{return ah(ax,aw)}if(!aw&&!ax){return av}if((!M(aw)||null===aw)&&av){aw=av.getSiteId()}if((!M(ax)||null===ax)&&av){ax=av.getTrackerUrl()}var au,at=0;for(at;at<L.length;at++){au=L[at];if(au&&String(au.getSiteId())===String(aw)&&au.getTrackerUrl()===ax){return au}}},retryMissedPluginCalls:function(){var au=al;al=[];var at=0;for(at;at<au.length;at++){aj(au[at])}}};if(typeof define==="function"&&define.amd){define("piwik",[],function(){return u});define("matomo",[],function(){return u})}return u}())}
|
70 |
/*!!! pluginTrackerHook */
|
app/lang/am.json
CHANGED
@@ -1289,6 +1289,7 @@
|
|
1289 |
"Timezone_Pacific_Gambier": "ጋምቢየር",
|
1290 |
"Timezone_Pacific_Honolulu": "ሆኖሉሉ",
|
1291 |
"Timezone_Pacific_Johnston": "ጆንስተን",
|
|
|
1292 |
"Timezone_Pacific_Kiritimati": "ኪሪቲማቲ",
|
1293 |
"Timezone_Pacific_Kosrae": "ኮስሬ",
|
1294 |
"Timezone_Pacific_Kwajalein": "ክዋጃሊን",
|
1289 |
"Timezone_Pacific_Gambier": "ጋምቢየር",
|
1290 |
"Timezone_Pacific_Honolulu": "ሆኖሉሉ",
|
1291 |
"Timezone_Pacific_Johnston": "ጆንስተን",
|
1292 |
+
"Timezone_Pacific_Kanton": "ካንቶን",
|
1293 |
"Timezone_Pacific_Kiritimati": "ኪሪቲማቲ",
|
1294 |
"Timezone_Pacific_Kosrae": "ኮስሬ",
|
1295 |
"Timezone_Pacific_Kwajalein": "ክዋጃሊን",
|
app/lang/ar.json
CHANGED
@@ -496,14 +496,13 @@
|
|
496 |
},
|
497 |
"API": {
|
498 |
"ChangeTokenHint": "فضلاً الذهاب إلى %1$sصفحة الإعدادات الشخصية%2$sعند رغبتك تغيير هذا الرمز المميَّز.",
|
499 |
-
"
|
500 |
"KeepTokenSecret": "مفتاح المصادقة هذا سري كما هو الحال في اسم المستخدم ولكلمة المرور، %1$s لا تعطه لأحد قط%2$s!",
|
501 |
"LoadedAPIs": "تم تحميل %s واجهة تطبيقات.",
|
502 |
"MoreInformation": "لمزيد من المعلومات حول واجهة التطبيقات لبرنامج Matomo، الرجاء مراجعة %1$s مقدمة إلى واجهة تطبيقات Matomo %2$s وكذلك %3$sدليل واجهة تطبيقات Matomo %4$s.",
|
503 |
"PluginDescription": "يمكن الحصول على جميع بيانات Matomo عبر واجهات برمجية بسيطة. وهذه الإضافة هي نقطة بداية خدمة وب يمكنك استدعاؤها للحصول على بيانات تحليلات وب بصيغ xml ، json ، php ، csv وغيرها",
|
504 |
"TopLinkTooltip": "الوصول إلى تحليلات ويب الخاصة بك برمجياً عبر واجهة تطبيقات بسيطة API على شكل json, xml وغيرها.",
|
505 |
-
"UserAuthentication": "مصادقة المستخدم"
|
506 |
-
"Glossary": "المسرد"
|
507 |
},
|
508 |
"Actions": {
|
509 |
"AvgGenerationTimeTooltip": "متوسط على أساس %1$s كبسة %2$s ما بين %3$s و %4$s",
|
@@ -1045,7 +1044,6 @@
|
|
1045 |
"SystemCheckEvalHelp": "يتطلبها HTML QuickForm ونظام قولبة Smarty.",
|
1046 |
"SystemCheckExtensions": "الإضافات الأخرى المطلوبة",
|
1047 |
"SystemCheckFileIntegrity": "سلامة الملفات",
|
1048 |
-
"SystemCheckFunctionHelp": "تحتاج لتفعيل هذه الوظيفة المضمّنة.",
|
1049 |
"SystemCheckFunctions": "الدوال المطلوبة",
|
1050 |
"SystemCheckGDFreeType": "GD > 2.x + Freetype (رسوم)",
|
1051 |
"SystemCheckGDHelp": "لن تعمل خاصية sparklines (الرسومات المصغرة).",
|
@@ -2200,6 +2198,7 @@
|
|
2200 |
"Timezone_Pacific_Gambier": "جامبير",
|
2201 |
"Timezone_Pacific_Honolulu": "هونولولو",
|
2202 |
"Timezone_Pacific_Johnston": "جونستون",
|
|
|
2203 |
"Timezone_Pacific_Kiritimati": "كيريتي ماتي",
|
2204 |
"Timezone_Pacific_Kosrae": "كوسرا",
|
2205 |
"Timezone_Pacific_Kwajalein": "كواجالين",
|
@@ -2478,7 +2477,6 @@
|
|
2478 |
},
|
2479 |
"UsersManager": {
|
2480 |
"2FA": "مث",
|
2481 |
-
"TwoFactorAuthentication": "المصادقة الثنائية",
|
2482 |
"AddUser": "أضف مستخدم جديد",
|
2483 |
"AllWebsites": "كافة المواقع",
|
2484 |
"ApplyToAllWebsites": "تطبيق على كافة المواقع",
|
@@ -2495,8 +2493,8 @@
|
|
2495 |
"ForAnonymousUsersReportDateToLoadByDefault": "للمستخدمين المجهولين، حدد تاريخ التقرير",
|
2496 |
"ManageAccess": "إدارة صلاحيات الوصول",
|
2497 |
"MenuAnonymousUserSettings": "إعدادات المستخدمين المجهولين",
|
2498 |
-
"MenuUsers": "المستخدمون",
|
2499 |
"MenuUserSettings": "إعدادات المستخدم",
|
|
|
2500 |
"PrivAdmin": "إشراف",
|
2501 |
"PrivNone": "بدون وصول",
|
2502 |
"PrivView": "مشاهدة",
|
@@ -2504,15 +2502,15 @@
|
|
2504 |
"ReportToLoadByDefault": "التقرير الافتراضي",
|
2505 |
"TheLoginScreen": "شاشة تسجيل الدخول",
|
2506 |
"ThereAreCurrentlyNRegisteredUsers": "يوجد حالياً %s مستخدم مسجل.",
|
|
|
2507 |
"TypeYourPasswordAgain": "اكتب كلمة المرور الجديدة مرة أخرى.",
|
2508 |
"User": "المستخدم",
|
|
|
2509 |
"UsersManagement": "إدارة المستخدمين",
|
2510 |
"UsersManagementMainDescription": "أنشئ متسخدم جديد أو قم بتحديث مستخدم قائم. يمكنك أن تضبط صلاحياتهم بالأعلى.",
|
2511 |
"YourUsernameCannotBeChanged": "لا يمكن تغيير اسم المستخدم الخاص بك.",
|
2512 |
"YourVisitsAreIgnoredOnDomain": "%1$s زياراتك يتم تجاهلها في Matomo%2$s %3$s(تم العثور على كوكيز التجاهل في متصفحك).",
|
2513 |
-
"YourVisitsAreNotIgnored": "%1$s لا يتم تجاهل زياراتك في Matomo%2$s (كوكيز التجاهل غير موجودة في متصفحك)."
|
2514 |
-
"ShowAll": "عرض الكل",
|
2515 |
-
"Username": "اسم المستخدم"
|
2516 |
},
|
2517 |
"VisitFrequency": {
|
2518 |
"ColumnActionsByReturningVisits": "السلوكيات بواسطة الزيارات العائدة",
|
@@ -2553,9 +2551,23 @@
|
|
2553 |
"WidgetVisitsByDaysSinceLast": "الزيارات حسب الأيام منذ آخر زيارة"
|
2554 |
},
|
2555 |
"VisitsSummary": {
|
|
|
2556 |
"GenerateQueries": "%s استعلام تم تنفيذهم",
|
2557 |
"GenerateTime": "%s ثانية لإنشاء هذه الصفحة",
|
2558 |
-
"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2559 |
"VisitsSummary": "ملخص الزيارات",
|
2560 |
"WidgetLastVisits": "الرسم البياني لآخر الزيارات",
|
2561 |
"WidgetOverviewGraph": "نظرة عامة مع الرسم البياني",
|
496 |
},
|
497 |
"API": {
|
498 |
"ChangeTokenHint": "فضلاً الذهاب إلى %1$sصفحة الإعدادات الشخصية%2$sعند رغبتك تغيير هذا الرمز المميَّز.",
|
499 |
+
"Glossary": "المسرد",
|
500 |
"KeepTokenSecret": "مفتاح المصادقة هذا سري كما هو الحال في اسم المستخدم ولكلمة المرور، %1$s لا تعطه لأحد قط%2$s!",
|
501 |
"LoadedAPIs": "تم تحميل %s واجهة تطبيقات.",
|
502 |
"MoreInformation": "لمزيد من المعلومات حول واجهة التطبيقات لبرنامج Matomo، الرجاء مراجعة %1$s مقدمة إلى واجهة تطبيقات Matomo %2$s وكذلك %3$sدليل واجهة تطبيقات Matomo %4$s.",
|
503 |
"PluginDescription": "يمكن الحصول على جميع بيانات Matomo عبر واجهات برمجية بسيطة. وهذه الإضافة هي نقطة بداية خدمة وب يمكنك استدعاؤها للحصول على بيانات تحليلات وب بصيغ xml ، json ، php ، csv وغيرها",
|
504 |
"TopLinkTooltip": "الوصول إلى تحليلات ويب الخاصة بك برمجياً عبر واجهة تطبيقات بسيطة API على شكل json, xml وغيرها.",
|
505 |
+
"UserAuthentication": "مصادقة المستخدم"
|
|
|
506 |
},
|
507 |
"Actions": {
|
508 |
"AvgGenerationTimeTooltip": "متوسط على أساس %1$s كبسة %2$s ما بين %3$s و %4$s",
|
1044 |
"SystemCheckEvalHelp": "يتطلبها HTML QuickForm ونظام قولبة Smarty.",
|
1045 |
"SystemCheckExtensions": "الإضافات الأخرى المطلوبة",
|
1046 |
"SystemCheckFileIntegrity": "سلامة الملفات",
|
|
|
1047 |
"SystemCheckFunctions": "الدوال المطلوبة",
|
1048 |
"SystemCheckGDFreeType": "GD > 2.x + Freetype (رسوم)",
|
1049 |
"SystemCheckGDHelp": "لن تعمل خاصية sparklines (الرسومات المصغرة).",
|
2198 |
"Timezone_Pacific_Gambier": "جامبير",
|
2199 |
"Timezone_Pacific_Honolulu": "هونولولو",
|
2200 |
"Timezone_Pacific_Johnston": "جونستون",
|
2201 |
+
"Timezone_Pacific_Kanton": "كانتون",
|
2202 |
"Timezone_Pacific_Kiritimati": "كيريتي ماتي",
|
2203 |
"Timezone_Pacific_Kosrae": "كوسرا",
|
2204 |
"Timezone_Pacific_Kwajalein": "كواجالين",
|
2477 |
},
|
2478 |
"UsersManager": {
|
2479 |
"2FA": "مث",
|
|
|
2480 |
"AddUser": "أضف مستخدم جديد",
|
2481 |
"AllWebsites": "كافة المواقع",
|
2482 |
"ApplyToAllWebsites": "تطبيق على كافة المواقع",
|
2493 |
"ForAnonymousUsersReportDateToLoadByDefault": "للمستخدمين المجهولين، حدد تاريخ التقرير",
|
2494 |
"ManageAccess": "إدارة صلاحيات الوصول",
|
2495 |
"MenuAnonymousUserSettings": "إعدادات المستخدمين المجهولين",
|
|
|
2496 |
"MenuUserSettings": "إعدادات المستخدم",
|
2497 |
+
"MenuUsers": "المستخدمون",
|
2498 |
"PrivAdmin": "إشراف",
|
2499 |
"PrivNone": "بدون وصول",
|
2500 |
"PrivView": "مشاهدة",
|
2502 |
"ReportToLoadByDefault": "التقرير الافتراضي",
|
2503 |
"TheLoginScreen": "شاشة تسجيل الدخول",
|
2504 |
"ThereAreCurrentlyNRegisteredUsers": "يوجد حالياً %s مستخدم مسجل.",
|
2505 |
+
"TwoFactorAuthentication": "المصادقة الثنائية",
|
2506 |
"TypeYourPasswordAgain": "اكتب كلمة المرور الجديدة مرة أخرى.",
|
2507 |
"User": "المستخدم",
|
2508 |
+
"Username": "اسم المستخدم",
|
2509 |
"UsersManagement": "إدارة المستخدمين",
|
2510 |
"UsersManagementMainDescription": "أنشئ متسخدم جديد أو قم بتحديث مستخدم قائم. يمكنك أن تضبط صلاحياتهم بالأعلى.",
|
2511 |
"YourUsernameCannotBeChanged": "لا يمكن تغيير اسم المستخدم الخاص بك.",
|
2512 |
"YourVisitsAreIgnoredOnDomain": "%1$s زياراتك يتم تجاهلها في Matomo%2$s %3$s(تم العثور على كوكيز التجاهل في متصفحك).",
|
2513 |
+
"YourVisitsAreNotIgnored": "%1$s لا يتم تجاهل زياراتك في Matomo%2$s (كوكيز التجاهل غير موجودة في متصفحك)."
|
|
|
|
|
2514 |
},
|
2515 |
"VisitFrequency": {
|
2516 |
"ColumnActionsByReturningVisits": "السلوكيات بواسطة الزيارات العائدة",
|
2551 |
"WidgetVisitsByDaysSinceLast": "الزيارات حسب الأيام منذ آخر زيارة"
|
2552 |
},
|
2553 |
"VisitsSummary": {
|
2554 |
+
"AverageVisitDuration": "معدل طول الزيارة",
|
2555 |
"GenerateQueries": "%s استعلام تم تنفيذهم",
|
2556 |
"GenerateTime": "%s ثانية لإنشاء هذه الصفحة",
|
2557 |
+
"MaxNbActions": "عمليات على أقصى حد في زيارة وحيدة",
|
2558 |
+
"NbActionsDescription": "%s عمليات",
|
2559 |
+
"NbActionsPerVisit": "عمليات (مشاهدات الصفحة، التحميلات، الروابط الصادرة والبحوث على المنصة) أحادية",
|
2560 |
+
"NbDownloadsDescription": "تحميلات",
|
2561 |
+
"NbKeywordsDescription": "كلمات مختلفة",
|
2562 |
+
"NbOutlinksDescription": "روابط صادرة",
|
2563 |
+
"NbPageviewsDescription": "مشاهدات الصفحة",
|
2564 |
+
"NbSearchesDescription": "مجموع البحوث على المنصة",
|
2565 |
+
"NbUniqueDownloadsDescription": "تحميلات مختلفة",
|
2566 |
+
"NbUniqueOutlinksDescription": "روابط صادرة مختلفة",
|
2567 |
+
"NbUniquePageviewsDescription": "مشاهدات الصفحة الأحادية",
|
2568 |
+
"NbUniqueVisitors": "مستعملين مختلفين",
|
2569 |
+
"NbUsersDescription": "مستعملين",
|
2570 |
+
"NbVisitsDescription": "زيارات",
|
2571 |
"VisitsSummary": "ملخص الزيارات",
|
2572 |
"WidgetLastVisits": "الرسم البياني لآخر الزيارات",
|
2573 |
"WidgetOverviewGraph": "نظرة عامة مع الرسم البياني",
|
app/lang/be.json
CHANGED
@@ -259,7 +259,6 @@
|
|
259 |
"YourChangesHaveBeenSaved": "Вашы змены былі захаваныя."
|
260 |
},
|
261 |
"API": {
|
262 |
-
"GenerateVisits": "Калі ў вас няма дадзеных на сённяшні дзень, вы можаце стварыць некаторыя дадзеныя, выкарыстоўваючы даданы модуль %1$s. Уключыце даданы модуль %2$s, затым націсніце на \"Генератар наведванняў\" у адміністрацыйнай частцы Matomo.",
|
263 |
"KeepTokenSecret": "Гэта ідэнтыфікацыйны токэн, ён такі жа сакрэтны, як ваш лагін і пароль, %1$s не дзеліцеся ім ня з кім%2$s!",
|
264 |
"LoadedAPIs": "%s API паспяхова загружаны",
|
265 |
"MoreInformation": "Дадатковыя звесткі аб Matomo API, калі ласка, звярніце ўвагу на %1$s Уводзіны ў Matomo API %2$s і %3$s Matomo API спасылкі %4$s.",
|
@@ -1071,7 +1070,7 @@
|
|
1071 |
"Currency_LBP": "Ліванскі фунт",
|
1072 |
"Currency_LKR": "Шры-ланкійская рупія",
|
1073 |
"Currency_LRD": "Ліберыйскі долар",
|
1074 |
-
"Currency_LSL": "
|
1075 |
"Currency_LYD": "Лівійскі дынар",
|
1076 |
"Currency_MAD": "Мараканскі дырхам",
|
1077 |
"Currency_MDL": "Малдаўскі лей",
|
@@ -1189,10 +1188,10 @@
|
|
1189 |
"Day_Short_StandAlone_7": "нд",
|
1190 |
"EnglishLanguageName": "Belarusian",
|
1191 |
"Format_DateTime_Long": "EEEE, d MMMM y 'г'. {time}",
|
1192 |
-
"Format_DateTime_Short": "d
|
1193 |
"Format_Date_Day_Month": "E, d MMM",
|
1194 |
"Format_Date_Long": "EEEE, d MMMM y 'г'.",
|
1195 |
-
"Format_Date_Short": "d.
|
1196 |
"Format_Hour_12": "hh a",
|
1197 |
"Format_Hour_24": "HH",
|
1198 |
"Format_Interval_Long_D": "d–d MMMM y",
|
@@ -1666,6 +1665,7 @@
|
|
1666 |
"Timezone_Pacific_Gambier": "Астравы Гамб’е",
|
1667 |
"Timezone_Pacific_Honolulu": "Ганалулу",
|
1668 |
"Timezone_Pacific_Johnston": "Джонстан",
|
|
|
1669 |
"Timezone_Pacific_Kiritimati": "Кірыцімаці",
|
1670 |
"Timezone_Pacific_Kosrae": "Кусаіе",
|
1671 |
"Timezone_Pacific_Kwajalein": "Кваджалейн",
|
259 |
"YourChangesHaveBeenSaved": "Вашы змены былі захаваныя."
|
260 |
},
|
261 |
"API": {
|
|
|
262 |
"KeepTokenSecret": "Гэта ідэнтыфікацыйны токэн, ён такі жа сакрэтны, як ваш лагін і пароль, %1$s не дзеліцеся ім ня з кім%2$s!",
|
263 |
"LoadedAPIs": "%s API паспяхова загружаны",
|
264 |
"MoreInformation": "Дадатковыя звесткі аб Matomo API, калі ласка, звярніце ўвагу на %1$s Уводзіны ў Matomo API %2$s і %3$s Matomo API спасылкі %4$s.",
|
1070 |
"Currency_LBP": "Ліванскі фунт",
|
1071 |
"Currency_LKR": "Шры-ланкійская рупія",
|
1072 |
"Currency_LRD": "Ліберыйскі долар",
|
1073 |
+
"Currency_LSL": "Лесоцкі лоці",
|
1074 |
"Currency_LYD": "Лівійскі дынар",
|
1075 |
"Currency_MAD": "Мараканскі дырхам",
|
1076 |
"Currency_MDL": "Малдаўскі лей",
|
1188 |
"Day_Short_StandAlone_7": "нд",
|
1189 |
"EnglishLanguageName": "Belarusian",
|
1190 |
"Format_DateTime_Long": "EEEE, d MMMM y 'г'. {time}",
|
1191 |
+
"Format_DateTime_Short": "d MMM y 'г'. {time}",
|
1192 |
"Format_Date_Day_Month": "E, d MMM",
|
1193 |
"Format_Date_Long": "EEEE, d MMMM y 'г'.",
|
1194 |
+
"Format_Date_Short": "d MMM y 'г'.",
|
1195 |
"Format_Hour_12": "hh a",
|
1196 |
"Format_Hour_24": "HH",
|
1197 |
"Format_Interval_Long_D": "d–d MMMM y",
|
1665 |
"Timezone_Pacific_Gambier": "Астравы Гамб’е",
|
1666 |
"Timezone_Pacific_Honolulu": "Ганалулу",
|
1667 |
"Timezone_Pacific_Johnston": "Джонстан",
|
1668 |
+
"Timezone_Pacific_Kanton": "Kanton",
|
1669 |
"Timezone_Pacific_Kiritimati": "Кірыцімаці",
|
1670 |
"Timezone_Pacific_Kosrae": "Кусаіе",
|
1671 |
"Timezone_Pacific_Kwajalein": "Кваджалейн",
|
app/lang/bg.json
CHANGED
@@ -16,6 +16,7 @@
|
|
16 |
"Apply": "Приложи",
|
17 |
"ArchivingInlineHelp": "За сайтовете със среден или висок трафик, препоръчваме да изключите Matomo архивиране след гледане от браузър. Съветваме ви в този случай да използвате cron job за Вашите доклади на всеки час.",
|
18 |
"ArchivingTriggerDescription": "За по-големи Matomo инсталации, се препоръчва %1$scron job%2$s за автоматични доклади.",
|
|
|
19 |
"AuthenticationMethodSmtp": "Удостоверен метод за SMTP",
|
20 |
"AverageOrderValue": "Средна стойност на поръчка",
|
21 |
"AveragePrice": "Средна цена",
|
@@ -35,7 +36,7 @@
|
|
35 |
"Clear": "Изчисти",
|
36 |
"ClickHere": "Кликнете тук за повече информация.",
|
37 |
"ClickToRemoveComp": "Кликнете за да изтриете това сравнение.",
|
38 |
-
"ClickToSearch": "
|
39 |
"Close": "Затваряне",
|
40 |
"ColumnActionsPerVisit": "Действия при посещение",
|
41 |
"ColumnActionsPerVisitDocumentation": "Среден брой на действията (показвания на страници, изтегляния или отваряне на външни връзки), извършени по време на посещенията.",
|
@@ -59,7 +60,7 @@
|
|
59 |
"ColumnExits": "Изходи",
|
60 |
"ColumnExitsDocumentation": "Брой посещения, които са свършили на тази страница.",
|
61 |
"ColumnGenerationTime": "Време за генериране",
|
62 |
-
"ColumnHits": "
|
63 |
"ColumnKeyword": "Ключови думи",
|
64 |
"ColumnLabel": "Етикет",
|
65 |
"ColumnMaxActions": "Максимум действия при едно посещение",
|
@@ -68,7 +69,7 @@
|
|
68 |
"ColumnNbUniqVisitors": "Уникални посетители",
|
69 |
"ColumnNbUniqVisitorsDocumentation": "Броят на уникалните посетители, отварящи вашия уебсайт. Всеки потребител се брои само веднъж, дори ако посещава уебсайта няколко пъти на ден.",
|
70 |
"ColumnNbUsers": "Потребители",
|
71 |
-
"ColumnNbUsersDocumentation": "Броят на потребителите, влезли във
|
72 |
"ColumnNbVisits": "Посещения",
|
73 |
"ColumnNbVisitsDocumentation": "Ако посетителят отвори вашият сайт за първи път или поне 30 мин. след последното си посещение, то това ще се брои като ново посещение.",
|
74 |
"ColumnPageBounceRateDocumentation": "Процент посещения, които започват от тази страница и са последвани от незабавно напускане на сайта.",
|
@@ -86,19 +87,46 @@
|
|
86 |
"ColumnUniquePageviewsDocumentation": "Брой посещения, включващи тази страница. Ако страницата е видяна няколко пъти по време на посещението, се отчита като едно посещение.",
|
87 |
"ColumnValuePerVisit": "Стойност на посещението",
|
88 |
"ColumnViewedAfterSearch": "Избран от резултатите при търсене",
|
89 |
-
"ColumnViewedAfterSearchDocumentation": "Броят пъти, в който тази страница е била посетена, след като посетител е извършил търсене във
|
90 |
"ColumnViewsWithGenerationTime": "Прегледи на страницата с времето за генериране",
|
91 |
"ColumnVisitDuration": "Продължителност на посещение (в секунди)",
|
92 |
"ColumnVisitsWithConversions": "Посещения с Конверсия",
|
|
|
93 |
"CompareTo": "Сравнено с:",
|
|
|
|
|
|
|
|
|
|
|
|
|
94 |
"ComputedMetricAverageShortDocumentation": "Средна стойност от \"%1$s\".",
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
95 |
"ConfigFileIsNotWritable": "Конфигурационният файл %1$s на Matomo не е достъпен и Вашите настройки няма да бъдат запазени. %2$s Моля променете правата на файла, така, че да може да се пише в него.",
|
|
|
96 |
"Continue": "Продължи",
|
97 |
"ContinueToPiwik": "Продължете към Matomo",
|
98 |
"Copy": "Копиране",
|
|
|
|
|
|
|
99 |
"CurrentMonth": "Този месец",
|
100 |
"CurrentWeek": "Тази седмица",
|
101 |
"CurrentYear": "Тази година",
|
|
|
|
|
102 |
"Daily": "Ежедневно",
|
103 |
"DailyReport": "дневно",
|
104 |
"DailyReports": "Дневни доклади",
|
@@ -110,6 +138,7 @@
|
|
110 |
"DateRange": "Период от време:",
|
111 |
"DateRangeFrom": "От",
|
112 |
"DateRangeFromTo": "От %1$s до %2$s",
|
|
|
113 |
"DateRangeTo": "До",
|
114 |
"DaysHours": "%1$s дни %2$s часа",
|
115 |
"DaysSinceFirstVisit": "Дни след първото посещение",
|
@@ -121,6 +150,7 @@
|
|
121 |
"Description": "Описание",
|
122 |
"Desktop": "Десктоп",
|
123 |
"Details": "Детайли",
|
|
|
124 |
"Discount": "Отстъпка",
|
125 |
"DisplaySimpleTable": "Покажи проста таблица",
|
126 |
"DisplayTableWithGoalMetrics": "Покажи таблица с повече целеви показатели",
|
@@ -128,7 +158,8 @@
|
|
128 |
"Documentation": "Документация",
|
129 |
"Donate": "Дарение",
|
130 |
"Done": "Готово",
|
131 |
-
"
|
|
|
132 |
"DownloadFail_FileExists": "Файлът %s вече съществува!",
|
133 |
"DownloadFail_FileExistsContinue": "Направен е опит да се продължи свалянето за %s, но изцяло изтеглен файл вече съществува!",
|
134 |
"DownloadFail_HttpRequestFail": "Файлът не може да бъде свален! Възможно е да има проблем със сайта, от който се опитвате да сваляте. Може да се опитате по-късно отново да свалите файла или да го намерите от друго място.",
|
@@ -141,18 +172,31 @@
|
|
141 |
"Edit": "Редактирай",
|
142 |
"EncryptedSmtpTransport": "Въведете криптирания транспортен слой, който се изисква от Вашия SMTP сървър.",
|
143 |
"Error": "Грешка",
|
|
|
|
|
|
|
|
|
144 |
"EvolutionOverPeriod": "Развитие за периода",
|
145 |
"EvolutionSummaryGeneric": "%1$s в %2$s сравнено с %3$s в %4$s. Нарастване: %5$s",
|
|
|
146 |
"ExceptionCheckUserHasSuperUserAccessOrIsTheUser": "Потребителят трябва да бъде или привилигирован потребител или потребител '%s'.",
|
|
|
147 |
"ExceptionConfigurationFileNotFound": "Конфигурационния файл {%s} не бе намерен.",
|
|
|
|
|
|
|
|
|
148 |
"ExceptionDatabaseVersion": "Вашата %1$s версия е %2$s ,но Matomo изисква най-малко %3$s.",
|
|
|
149 |
"ExceptionDatabaseVersionNewerThanCodebaseWait": "Може би администраторите на Вашата Matomo инсталация приключват с обновлението на софтуера. Моля опитайте след няколко минути.",
|
150 |
"ExceptionDirectoryToDelete": "Папка за изтриване: %s",
|
151 |
"ExceptionFileIntegrity": "Цялостната проверка неуспешна: %s",
|
|
|
152 |
"ExceptionFilesizeMismatch": "Размерът на файла не съответства: %1$s (очаквана дължина: %2$s, намерен: %3$s)",
|
153 |
"ExceptionIncompatibleClientServerVersions": "Вашата %1$s клиентска версия е %2$s ,която е несъвместима с версията на сървъра %3$s.",
|
154 |
"ExceptionInvalidAggregateReportsFormat": "Формат на обобщените доклади '%1$s' не е валиден. Опитайте някое от следните вместо това: %2$s.",
|
155 |
"ExceptionInvalidArchiveTimeToLive": "Днес времето за живот на архива трябва да бъде число в секунди по-голямо от нула",
|
|
|
156 |
"ExceptionInvalidDateFormat": "Формата на датата трябва да е: %1$s или ключова дума, поддържана от %2$s функция (виж %3$s за повече информация)",
|
157 |
"ExceptionInvalidDateRange": "Датата '%1$s' не е правилен период от време. Тя трябва да има следния формат: %2$s.",
|
158 |
"ExceptionInvalidPeriod": "Периодът '%1$s' не се поддържа. Опитайте някоя от следните вместо това: %2$s",
|
@@ -164,43 +208,65 @@
|
|
164 |
"ExceptionMethodNotFound": "Методът '%1$s' не съществува или не е наличен в модулът '%2$s'.",
|
165 |
"ExceptionMissingFile": "Липсващ файл: %s",
|
166 |
"ExceptionNonceMismatch": "Не може да се провери кода за сигурност на тази форма.",
|
|
|
|
|
167 |
"ExceptionPrivilege": "Нямате достъп до този ресурс, тъй като изисква %s достъп.",
|
|
|
|
|
|
|
168 |
"ExceptionReportNotFound": "Заявения отчет не съществува.",
|
169 |
"ExceptionUnableToStartSession": "Невъзможно е да се стартира сесия.",
|
170 |
"ExceptionUndeletableFile": "Не мога да изтрия %s",
|
|
|
|
|
|
|
|
|
171 |
"ExceptionUnreadableFileDisabledMethod": "Конфигурационния файл {%1$s} не може да бъде прочетен. Вашият хостинг може да е забранил %2$s.",
|
|
|
172 |
"ExceptionWidgetNotFound": "Заявената от вас джаджа не съществува.",
|
173 |
"ExpandDataTableFooter": "Промяна на визуализацията или конфигуриране на доклада",
|
174 |
"Export": "Запазване",
|
175 |
"ExportAsImage": "Запазване като изображение",
|
176 |
"ExportThisReport": "Запази в други формати",
|
177 |
"Faq": "Често задавани въпроси",
|
|
|
|
|
178 |
"FileIntegrityWarningReuploadBis": "Опитайте се да качите отново файловете на Matomo в двоичен режим.",
|
179 |
"First": "Първи",
|
180 |
"Flatten": "Изравнено",
|
181 |
"ForExampleShort": "например",
|
|
|
|
|
182 |
"Forums": "Форуми",
|
183 |
"FromReferrer": "от",
|
184 |
"GeneralInformation": "Обща информация",
|
185 |
"GeneralSettings": "Основни настройки",
|
|
|
186 |
"GetStarted": "Как да започнем",
|
187 |
"GiveUsYourFeedback": "Напишете ни отзив!",
|
188 |
"GoTo": "Към %s",
|
|
|
189 |
"Goal": "Цел",
|
190 |
"GraphHelp": "Повече информация за показаните графики в Matomo.",
|
191 |
"HelloUser": "Здравей, %s!",
|
192 |
"Help": "Помощ",
|
|
|
|
|
193 |
"HelpTranslatePiwik": "Може би желаете да ни %1$sпомогнете с подобряването на превода на Matomo%2$s?",
|
194 |
"Hide": "скриване",
|
195 |
"HoursMinutes": "%1$s часа %2$s мин.",
|
196 |
"IP": "IP адрес",
|
197 |
"Id": "ИД",
|
|
|
|
|
198 |
"InfoFor": "Информация за %s",
|
199 |
"Installed": "Инсталирано",
|
200 |
"InvalidDateRange": "Невалиден период от време. Моля, опитайте отново.",
|
201 |
"InvalidResponse": "Получените данни е невалидни.",
|
202 |
"JsTrackingTag": "JavaScript код",
|
|
|
203 |
"Language": "Език",
|
|
|
204 |
"LastDays": "Последните %s дни (с днес)",
|
205 |
"LastDaysShort": "Последните %s дни",
|
206 |
"LearnMore": "%1$sнаучете повече%2$s",
|
@@ -213,7 +279,11 @@
|
|
213 |
"Logout": "Изход",
|
214 |
"MainMetrics": "Главни метрики",
|
215 |
"Matches": "Съвпадения",
|
|
|
|
|
|
|
216 |
"Measurable": "Измерим",
|
|
|
217 |
"Measurables": "Измерими",
|
218 |
"MediumToHighTrafficItIsRecommendedTo": "За среден до висок трафик на сайтове, ние препоръчваме да обработвате докладите за днес на всеки половин час (%1$s секунди) или всеки час (%2$s секунди).",
|
219 |
"Metadata": "Мета данни",
|
@@ -234,9 +304,13 @@
|
|
234 |
"NUsers": "%s потребители",
|
235 |
"NVisits": "%s посещения",
|
236 |
"Name": "Име",
|
|
|
237 |
"NbActions": "Брой действията",
|
|
|
238 |
"NbSearches": "Брой вътрешни търсения",
|
|
|
239 |
"Never": "Никога",
|
|
|
240 |
"NewReportsWillBeProcessedByCron": "Когато Matomo архивирането не е предизвикано от браузърът, новите доклади ще бъдат обработени от crontab.",
|
241 |
"NewUpdatePiwikX": "Нова версия: Matomo %s",
|
242 |
"NewVisitor": "Нов посетител",
|
@@ -247,6 +321,7 @@
|
|
247 |
"NoDataForTagCloud": "Няма данни за този таг облак.",
|
248 |
"NotDefined": "%s недефинирани",
|
249 |
"NotInstalled": "Не е иснталиран",
|
|
|
250 |
"NotRecommended": "не е препоръчително",
|
251 |
"NotValid": "%s не е валиден",
|
252 |
"Note": "Бележка",
|
@@ -262,43 +337,59 @@
|
|
262 |
"OperationAtMost": "Най-много",
|
263 |
"OperationContains": "Съдържа",
|
264 |
"OperationDoesNotContain": "Не съдържа",
|
|
|
265 |
"OperationEquals": "Еквивалентно",
|
266 |
"OperationGreaterThan": "Повече от",
|
267 |
"OperationIs": "е",
|
268 |
"OperationIsNot": "Не е",
|
269 |
"OperationLessThan": "По-малко от",
|
270 |
"OperationNotEquals": "Еквивалентно на",
|
|
|
271 |
"OptionalSmtpPort": "Не е задължително. По подразбиране е 25 за некриптиран и TLS SMTP, и 465 за SSL SMTP.",
|
272 |
"Options": "Настройки",
|
|
|
273 |
"OrCancel": "или %1$s Затвори %2$s",
|
274 |
"Others": "Други",
|
275 |
"Outlink": "Външна връзка",
|
276 |
"Outlinks": "Изходящи",
|
277 |
"OverlayRowActionTooltip": "Вижте анализите директно от сайта си (отваря нов подпрозорец)",
|
|
|
278 |
"Overview": "Общ преглед",
|
279 |
"Pages": "Страници",
|
|
|
|
|
280 |
"ParameterMustIntegerBetween": "Параметърът %1$s трябва да има цифрова стойност от %2$s до %3$s.",
|
281 |
"Password": "Парола",
|
282 |
"Period": "Период",
|
283 |
"Piechart": "Диаграма",
|
|
|
284 |
"PiwikXIsAvailablePleaseNotifyPiwikAdmin": "%1$s е наличен. Моля, уведомете %2$sMatomo администратор%3$s.",
|
285 |
"PiwikXIsAvailablePleaseUpdateNow": "Matomo %1$s е наличен. %2$s Обновете сега. %3$s (вижте %4$s промените%5$s).",
|
|
|
286 |
"PleaseSpecifyValue": "Моля, въведете стойност за '%s'.",
|
|
|
287 |
"PleaseUpdatePiwik": "Моля, актуализирайте своя Matomo",
|
288 |
-
"
|
289 |
-
"
|
|
|
290 |
"PoweredBy": "Разработка на",
|
291 |
"Previous": "Назад",
|
292 |
"PreviousDays": "Предишните %s дни (без днес)",
|
293 |
"PreviousDaysShort": "Предходните %s дни",
|
|
|
|
|
294 |
"Price": "Цена",
|
|
|
295 |
"ProductConversionRate": "Степен на конверсия на продукта",
|
296 |
"ProductRevenue": "Приходи от продукта",
|
|
|
297 |
"PurchasedProducts": "Купени продукти",
|
298 |
"Quantity": "Количество",
|
299 |
"RangeReports": "Зададен от вас период",
|
300 |
"ReadThisToLearnMore": "%1$sПрочетете това, за да научите повече.%2$s",
|
301 |
"RealTime": "В реално време",
|
|
|
|
|
302 |
"Recommended": "Препоръчително",
|
303 |
"RecordsToPlot": "Записи за",
|
304 |
"Refresh": "Обновяване",
|
@@ -308,20 +399,26 @@
|
|
308 |
"Remove": "Премахни",
|
309 |
"Report": "Доклад",
|
310 |
"ReportGeneratedFrom": "Този доклад е генериран с данни от %s.",
|
|
|
311 |
"Reports": "Доклади",
|
312 |
"ReportsContainingTodayWillBeProcessedAtMostEvery": "Архивирай отчетите на всеки X секунди",
|
313 |
"ReportsWillBeProcessedAtMostEveryHour": "Докладите ще бъдат най-добре обработени на всеки час.",
|
314 |
"RequestTimedOut": "Данните, искани до %s изтече. Моля опитайте отново.",
|
315 |
"Required": "%s е необходимо",
|
|
|
316 |
"ReturningVisitor": "Завърнал се посетител",
|
317 |
"ReturningVisitorAllVisits": "Преглед на всички посещения",
|
318 |
"RowEvolutionRowActionTooltip": "Преглед на показателите, за този ред, по какъв начин са се променили през времето",
|
|
|
319 |
"Rows": "Редове",
|
320 |
"RowsToDisplay": "Редове за показване",
|
321 |
"Save": "Запиши",
|
322 |
"SaveImageOnYourComputer": "За да запазите изображението на вашия компютър, натиснете с десен бутон на изображението и изберете \"Save Image As...\"",
|
323 |
"Search": "Търсене",
|
324 |
"SearchNoResults": "Няма резултати",
|
|
|
|
|
|
|
325 |
"Security": "Сигурност",
|
326 |
"SeeAll": "вижте всички",
|
327 |
"SeeTheOfficialDocumentationForMoreInformation": "Прегледайте %1$sофициалната документация%2$s за повече информация.",
|
@@ -334,6 +431,9 @@
|
|
334 |
"SingleWebsitesDashboard": "Табло за единична страница",
|
335 |
"SmallTrafficYouCanLeaveDefault": "За сайтове с малък трафик, може да оставите по подразбиране %s секунди, както и достъп до всички доклади в реално време.",
|
336 |
"SmtpEncryption": "SMTP криптиране",
|
|
|
|
|
|
|
337 |
"SmtpPassword": "SMTP парола",
|
338 |
"SmtpPort": "SMTP порт",
|
339 |
"SmtpServerAddress": "SMTP сървър адрес",
|
@@ -345,50 +445,84 @@
|
|
345 |
"Table": "Таблица",
|
346 |
"TagCloud": "Етикети",
|
347 |
"Tax": "Данък",
|
|
|
|
|
348 |
"TimeAgo": "%s преди",
|
349 |
"TimeFormat": "Формат за часа",
|
350 |
"TimeOnPage": "Време на страница",
|
|
|
|
|
351 |
"Total": "Общо",
|
|
|
352 |
"TotalRevenue": "Общо приход",
|
353 |
"TotalVisitsPageviewsActionsRevenue": "(Всичко: %1$s посещения, %2$s прегледи, %3$s действия, %4$s приход)",
|
|
|
354 |
"TrackingScopeAction": "Действие",
|
|
|
355 |
"TrackingScopeVisit": "Посещение",
|
356 |
"TransitionsRowActionTooltip": "Вижте какво посетителите са правили преди и след посещаването на тази страница",
|
|
|
357 |
"TranslatorName": "Kristalin Chavdarov, Андон Иванов, Tom Atanasov, Dimitar Stamenov, Панайотис Кондоянис",
|
358 |
"UniquePurchases": "Уникални поръчки",
|
359 |
"Unknown": "Неизвестен",
|
|
|
360 |
"Upload": "Качи",
|
361 |
"UsePlusMinusIconsDocumentation": "Използвайте знаците плюс и минус за навигация.",
|
362 |
"UseSMTPServerForEmail": "Използвай SMTP сървър за имейл",
|
|
|
363 |
"UserId": "Потребителски идентификационен номер",
|
|
|
364 |
"Username": "Потребител",
|
365 |
"VBarGraph": "Графика",
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
366 |
"Value": "Стойност",
|
367 |
"View": "Преглед",
|
|
|
368 |
"ViewDocumentationFor": "Преглед на документацията за %1$s",
|
369 |
"Visit": "Посещение",
|
370 |
"VisitConvertedGoal": "Посещението се превръща в най-малко една цел",
|
371 |
"VisitConvertedGoalId": "Посещение, което се счита като Id на специална цел",
|
372 |
"VisitConvertedNGoals": "Посещението преобразува %s цели",
|
373 |
"VisitDuration": "Средно времетраене на посещението (в секунди)",
|
|
|
|
|
374 |
"VisitTypeExample": "Например, ако изберете всички посетители, които са се завърнали на сайта, включително тези, които са купили нещо при предишните посещения, API заявката ще съдържа %s",
|
|
|
375 |
"Visitor": "Посетител",
|
|
|
376 |
"VisitorID": "ID на посетител",
|
377 |
"VisitorIP": "IP на посетител",
|
|
|
378 |
"VisitorSettings": "Настройки на посетителя",
|
379 |
"Visitors": "Посетители",
|
380 |
"VisitsWith": "Посещения с %s",
|
|
|
381 |
"Warning": "Предупреждение",
|
|
|
|
|
382 |
"WarningFileIntegrityNoManifest": "Цялостната проверка на файла не може да бъде изпълнена поради липсата на manifest.inc.php.",
|
383 |
"WarningFileIntegrityNoManifestDeployingFromGit": "В случай, че Matomo се внедрява посредством Git, е нормално това съобщение да се появява.",
|
384 |
"WarningFileIntegrityNoMd5file": "Цялостната проверка не може да бъде осъществена поради липсата на md5_file() функцията.",
|
385 |
"WarningPasswordStored": "%1$sВнимание:%2$s Тази парола ще се съхранява в конфигурационния файл видими за всички, които я ползват.",
|
|
|
|
|
|
|
386 |
"Website": "Уебсайт",
|
387 |
"Weekly": "Ежеседмично",
|
388 |
"WeeklyReport": "седмично",
|
389 |
"WeeklyReports": "Седмични доклади",
|
390 |
"WellDone": "Браво!",
|
391 |
-
"Widget": "
|
392 |
"Widgets": "Джаджи",
|
393 |
"XComparedToY": "%1$s сравнено с %2$s",
|
394 |
"XFromY": "%1$s от %2$s",
|
@@ -397,8 +531,11 @@
|
|
397 |
"YearsDays": "%1$s години %2$s дни",
|
398 |
"Yes": "Да",
|
399 |
"YouAreCurrentlyUsing": "Вие използвате Matomo %s.",
|
|
|
400 |
"YouMustBeLoggedIn": "Трябва да сте влязъл, за да имате достъп до тази функционалност.",
|
401 |
-
"
|
|
|
|
|
402 |
},
|
403 |
"Mobile": {
|
404 |
"AboutPiwikMobile": "За Matomo Mobile",
|
@@ -420,12 +557,16 @@
|
|
420 |
"EmailUs": "Пишете ни",
|
421 |
"EnableGraphsLabel": "Покажи графики",
|
422 |
"EnterAuthCode": "Въведете код за удостоверяване",
|
|
|
423 |
"EnterCorrectAuthCode": "Въведете правилния код за удостоверяване",
|
424 |
"EvolutionGraph": "Графика показваща историята",
|
|
|
425 |
"HelpUsToImprovePiwikMobile": "Желаете ли да активирате анонимното проследяване в Matomo Mobile?",
|
426 |
"HowtoDeleteAnAccount": "Натиснете продължително, за да изтриете профил.",
|
427 |
"HowtoDeleteAnAccountOniOS": "Плъзнете от ляво на дясно за да изтриете акаунта",
|
|
|
428 |
"HowtoLoginAnonymous": "Оставете потребителско име и парола празно за анонимен вход",
|
|
|
429 |
"HttpTimeout": "HTTP сесията изтече",
|
430 |
"IgnoreSslError": "Игнориране на SSL грешка",
|
431 |
"IncompatiblePiwikVersion": "Matomo версията, която използвате не е съвместима с Matomo Mobile 2. Обновете вашата инсталация на Matomo и пробвайте отново или инсталирайте Matomo Mobile 1.",
|
@@ -434,10 +575,12 @@
|
|
434 |
"LoginCredentials": "Потребителски данни за вписване",
|
435 |
"LoginToPiwikToChangeSettings": "Впишете се във вашия Matomo сървър, за да създавате и обновявате сайтове, потребители или да променяте основни настройки като „Доклад за зареждане по подразбиране“.",
|
436 |
"LoginUseHttps": "Използване на HTTPS",
|
|
|
437 |
"MatomoMobile": "Matomo мобилно приложение",
|
438 |
"MultiChartLabel": "Покажи sparklines",
|
439 |
"NavigationBack": "Назад",
|
440 |
"NetworkError": "Мрежова грешка",
|
|
|
441 |
"NetworkErrorWithStatusCodeShort": "Мрежова грешка %s",
|
442 |
"NetworkNotReachable": "Мрежата не постижима",
|
443 |
"NoAccountIsSelected": "Трябва да изберете профил. Добавете нов, ако не сте създали до момента такъв.",
|
@@ -449,6 +592,7 @@
|
|
449 |
"NoWebsiteFound": "Няма открит уебсайт",
|
450 |
"NoWebsitesShort": "Без сайтове",
|
451 |
"PossibleSslError": "Възможна грешка със SSL сертификата",
|
|
|
452 |
"PullDownToRefresh": "Дръпнете надолу за да опресните...",
|
453 |
"RatingDontRemindMe": "Не ми напомняй",
|
454 |
"RatingNotNow": "Не сега",
|
@@ -474,8 +618,10 @@
|
|
474 |
},
|
475 |
"RowEvolution": {
|
476 |
"AvailableMetrics": "Налични метрики",
|
|
|
477 |
"CompareRows": "Сравняване на записи",
|
478 |
"ComparingRecords": "Сравнявайки %s редове",
|
|
|
479 |
"MetricBetweenText": "между %1$s и %2$s",
|
480 |
"MetricChangeText": "%s промени през периода",
|
481 |
"MetricMinMax": "%1$s варират между %2$s и %3$s за периода",
|
@@ -485,72 +631,118 @@
|
|
485 |
"PickAnotherRow": "Изберете друг ред за сравнение"
|
486 |
},
|
487 |
"API": {
|
488 |
-
"
|
|
|
|
|
|
|
489 |
"KeepTokenSecret": "Това token_auth е тайна, като Вашето потребителско име и парола, %1$s не го споделяйте%2$s!",
|
490 |
-
"
|
491 |
-
"
|
492 |
-
"
|
493 |
-
"
|
|
|
|
|
|
|
|
|
|
|
494 |
},
|
495 |
"Actions": {
|
|
|
|
|
|
|
496 |
"AvgGenerationTimeTooltip": "Средно базирано на %1$s посещение(я) %2$s между %3$s и %4$s",
|
497 |
-
"
|
498 |
-
"
|
|
|
|
|
|
|
|
|
499 |
"ColumnDownloadURL": "Свален URL",
|
|
|
500 |
"ColumnEntryPageTitle": "Входно заглавие",
|
501 |
"ColumnEntryPageURL": "Входна страница",
|
|
|
502 |
"ColumnExitPageTitle": "Изходно заглавие",
|
503 |
"ColumnExitPageURL": "Изходна страница",
|
|
|
|
|
|
|
504 |
"ColumnNoResultKeyword": "Ключова дума без резултати в търсенето",
|
505 |
"ColumnPageName": "Име на страницата",
|
|
|
|
|
506 |
"ColumnPagesPerSearch": "Страници с резултати от търсене",
|
507 |
"ColumnPagesPerSearchDocumentation": "Посетителите ще търсят във вашия сайт, а понякога избират „Напред“, за да видят повече резултати. Това е средният брой на страниците с резултати от търсенето, видян за тази ключова дума.",
|
508 |
-
"ColumnPageURL": "Страница URL",
|
509 |
"ColumnSearchCategory": "Търсена категория",
|
510 |
-
"
|
511 |
-
"ColumnSearchesDocumentation": "Брой посещения търсениза тази ключова дума от системата за търсене на твоя сайт.",
|
512 |
"ColumnSearchExitsDocumentation": "Процент посещения, след които, потребителите са напуснали сайта, при търсене за тази ключова дума.",
|
513 |
"ColumnSearchResultsCount": "Брой резултати от търсенето",
|
|
|
|
|
514 |
"ColumnSiteSearchKeywords": "Уникални ключови думи",
|
515 |
"ColumnUniqueClicks": "Уникални кликове",
|
516 |
"ColumnUniqueClicksDocumentation": "Броят на посещенията които са кликнали на тази връзка. Ако на тази връзка е било кликано няколко пъти, при едно посещение, отчита се само веднъж.",
|
517 |
-
"ColumnUniqueDownloads": "Уникални
|
518 |
"ColumnUniqueOutlinks": "Уникални изходящи",
|
519 |
-
"DownloadsReportDocumentation": "В този отчет можете да видите файловете, които
|
|
|
|
|
520 |
"EntryPageTitles": "Входни заглавия",
|
521 |
"EntryPageTitlesReportDocumentation": "Този отчет съдържа информация за заглавията на входните страници, които са били използвани през определен период.",
|
|
|
|
|
|
|
522 |
"ExitPageTitles": "Изходни заглавия",
|
523 |
"ExitPageTitlesReportDocumentation": "Този отчет съдържа информация за заглавията на изходните страници, които са били използвани през определен период.",
|
|
|
|
|
|
|
|
|
524 |
"OneSearch": "1 търсене",
|
525 |
"OutlinkDocumentation": "Изходящата връзка е връзка, която води посетителя извън Вашия сайт (към друг домейн).",
|
526 |
"OutlinksReportDocumentation": "Този доклад показва йерархичен списък на изходящите адреси, които са избрани от посетителите.",
|
527 |
-
"
|
528 |
"PageTitlesReportDocumentation": "Този доклад включва информация за заглавията на посетена страница. %1$s Заглавието на страницата е HTML %2$s таг, който се изобразява в заглавната част на повечето браузери.",
|
|
|
|
|
529 |
"PageUrls": "URLs страница",
|
530 |
-
"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
531 |
"SiteSearchCategories1": "Този доклад показва списък с категориите, които посетителите са избрали при търсене във Вашия сайт.",
|
532 |
"SiteSearchCategories2": "Например, електронните магазини обикновено имат категоризатор, така че посетителите да могат да филтрират търсенията си за всички продукти по категория.",
|
|
|
533 |
"SiteSearchFollowingPagesDoc": "Когато посетителите разглеждат Вашия сайт, те търсят определена страница, продукт или услуга. Този доклад показва списъка със страници, които са били посетени предимно след използване на търсачката на сайта. С други думи, това е списъкът с най-посещаваните страници, които са били търсени от посетителите намиращи се във Вашия сайт.",
|
534 |
"SiteSearchIntro": "Проследявайки търсенията, които посетителите правят на вашия сайт, е един много ефективен начин да научите повече за това, което вашата аудитория търси. Това може да помогне за намиране на идеи за ново съдържание, нови продукти и търговия, които потенциалните клиенти могат да търсят, и като цяло да подобри впечатлението на потребителя от вашия сайт.",
|
535 |
"SiteSearchKeyword": "Ключова дума (Търсене на сайта)",
|
|
|
|
|
|
|
536 |
"SiteSearchKeywordsDocumentation": "Този отчет описва ключовите думи, които посетителите търсят през търсачката на сайта.",
|
537 |
"SiteSearchKeywordsNoResultDocumentation": "Този отчет съдържа „Търсене по ключови думи“, в който няма резултати от търсенето: може би алгоритъмът на търсачката може да се подобри, или може би вашите посетители търсят съдържание, което (все още) не е на вашия сайт?",
|
|
|
|
|
|
|
|
|
538 |
"SubmenuPagesEntry": "Входни страници",
|
539 |
"SubmenuPagesExit": "Изходни страници",
|
540 |
-
"SubmenuPageTitles": "Заглавия на страници",
|
541 |
"SubmenuSitesearch": "Търсене на сайт",
|
|
|
542 |
"WidgetEntryPageTitles": "Входящо заглавие на страницата",
|
543 |
"WidgetExitPageTitles": "Изходящо заглавие на страницата",
|
544 |
-
"WidgetPagesEntry": "Входящи страници",
|
545 |
-
"WidgetPagesExit": "Изходящи страници",
|
546 |
"WidgetPageTitles": "Заглавия на страниците",
|
547 |
"WidgetPageTitlesFollowingSearch": "Заглавия на страници следящи търсенията на сайтове",
|
548 |
"WidgetPageUrlsFollowingSearch": "Страници следящи търсенията на сайтове",
|
|
|
|
|
549 |
"WidgetSearchCategories": "Търси категории",
|
550 |
"WidgetSearchKeywords": "Ключови думи търсени от сайта",
|
551 |
-
"WidgetSearchNoResultKeywords": "Търсене по ключови думи без резултати"
|
552 |
-
"Behaviour": "Поведение",
|
553 |
-
"PagesSubcategoryHelp3": "Използвайте знаците плюс и минус за навигация."
|
554 |
},
|
555 |
"Annotations": {
|
556 |
"AddAnnotationsFor": "Добави анотации за %s...",
|
@@ -560,7 +752,7 @@
|
|
560 |
"ClickToEdit": "Цъкни за да редактираш тази анотация.",
|
561 |
"ClickToEditOrAdd": "Натисни за да редактираш или добавиш нова анотация.",
|
562 |
"ClickToStarOrUnstar": "Натиснете, за да отбележите или премахнете звезда за този коментар.",
|
563 |
-
"CreateNewAnnotation": "Създайте нова
|
564 |
"EnterAnnotationText": "Въведете своята бележка…",
|
565 |
"HideAnnotationsFor": "Скриване на анотациите за %s...",
|
566 |
"IconDesc": "Вижте бележките за този период от време.",
|
@@ -573,230 +765,564 @@
|
|
573 |
"YouCannotModifyThisNote": "Вие не можете да променяте тази анотация, защото все още не сте я създали или нямате администраторски права за този сайт."
|
574 |
},
|
575 |
"Contents": {
|
576 |
-
"
|
577 |
-
"
|
|
|
578 |
"ContentName": "Име на съдържанието",
|
|
|
|
|
|
|
|
|
|
|
579 |
"ContentTarget": "Целево съдържание",
|
580 |
-
"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
581 |
},
|
582 |
"CoreAdminHome": {
|
|
|
583 |
"Administration": "Администрация",
|
584 |
"ArchivingSettings": "Настройки за архивиране",
|
585 |
"BrandingSettings": "Настройки на бранда",
|
|
|
|
|
586 |
"ClickHereToOptIn": "Натиснете тук за съгласие.",
|
587 |
"ClickHereToOptOut": "Натиснете тук за отказ.",
|
588 |
-
"
|
|
|
|
|
|
|
|
|
|
|
589 |
"CustomLogoHelpText": "Можете да модифицирате логото на Matomo, което да се показва в интерфейса на потребителя и имейлите с отчети.",
|
|
|
|
|
590 |
"EmailServerSettings": "Настройки сървър на е-поща",
|
|
|
|
|
|
|
591 |
"ForBetaTestersOnly": "Само за бета тестери",
|
|
|
|
|
592 |
"ImageTracking": "Проследяване на изображенията",
|
593 |
"ImageTrackingIntro1": "Когато посетителят е изключил JavaScript или когато JavaScript не може да бъде използван, може да се използва проследяващата връзка към изображение, за да бъдат проследени посетителите.",
|
|
|
|
|
594 |
"ImageTrackingLink": "Връзка към изображение, за което се води отчет",
|
|
|
|
|
595 |
"ImportingServerLogs": "Импортиране на сървърни логове",
|
596 |
"ImportingServerLogsDesc": "Една алтернатива за проследяване на посетителите чрез браузъра (или чрез JavaScript или препратка към файла) е непрекъснато да се внасят сървърните логове. Научете повече за %1$sServer Log File Analytics%2$s.",
|
597 |
-
"InvalidPluginsWarning": "Следните
|
598 |
-
"InvalidPluginsYouCanUninstall": "Може да обновите или деинсталирате тези
|
599 |
-
"
|
|
|
|
|
|
|
|
|
|
|
600 |
"JSTracking_CampaignKwdParam": "Параметър ключова дума на кампанията",
|
601 |
"JSTracking_CampaignNameParam": "Параметър име на кампанията",
|
|
|
|
|
|
|
|
|
602 |
"JSTracking_CustomCampaignQueryParam": "Използвайте произволно име на параметър заявка за име и ключ на кампанията",
|
603 |
"JSTracking_CustomCampaignQueryParamDesc": "Забележка: %1$sMatomo автоматично ще засече Google Analytics параметрите.%2$s",
|
604 |
"JSTracking_DisableCookies": "Изключване на всички проследяващи бисквитки",
|
|
|
|
|
605 |
"JSTracking_EnableDoNotTrack": "Активиране на режим за засичане на включена функция „Не проследявай“",
|
606 |
-
"JSTracking_EnableDoNotTrack_AlreadyEnabled": "Забележка: От страна на сървъра е включена настройката „Не проследявай“, така че тази настройка няма да окаже ефект.",
|
607 |
"JSTracking_EnableDoNotTrackDesc": "Заявките за следене няма да бъдат изпратени, ако посетителите не желаят да бъде събирана информация за тях.",
|
|
|
|
|
|
|
608 |
"JSTracking_GroupPageTitlesByDomainDesc1": "В случай, че някой посети страница „За“ в блога, %1$s ще бъде записан\/о в 'Блог \/ За'. Това е най-лесният начин, за да се направи преглед на трафика по поддомейн.",
|
609 |
-
"JSTracking_MergeAliases": "В доклада за „Изходните страници“ скрийте
|
|
|
610 |
"JSTracking_MergeSubdomains": "Проследяване на посетителите във всички поддомейни на",
|
611 |
"JSTracking_MergeSubdomainsDesc": "Ако един посетител разгледа %1$s и %2$s, това ще се брои като едно уникално посещение.",
|
612 |
"JSTracking_PageCustomVars": "Проследяване на персонализирана променлива за всеки преглед на страница",
|
613 |
"JSTracking_PageCustomVarsDesc": "Пример: име на променливата „Категория“ и стойност „Бели книжа“.",
|
|
|
614 |
"JSTracking_VisitorCustomVars": "Проследяване на персонализирани променливи за този посетител",
|
615 |
"JSTracking_VisitorCustomVarsDesc": "Например, с име на променлива „Тип“ и стойност „Клиент“.",
|
616 |
-
"
|
617 |
-
"
|
618 |
-
"
|
|
|
|
|
|
|
619 |
"LogoUpload": "Изберете логото за качване",
|
620 |
-
"
|
621 |
"LogoUploadHelp": "Моля, качете файла в %1$s формати с минимална височина %2$s пиксела.",
|
|
|
|
|
622 |
"MenuDiagnostic": "Диагностика",
|
623 |
"MenuGeneralSettings": "Основни настройки",
|
624 |
"MenuMeasurables": "Измерими",
|
|
|
|
|
|
|
|
|
625 |
"OptOutComplete": "Отказът е приет; вашите посещения в този уебсайт няма да бъдат записвани от Инструмента за Уеб анализ.",
|
626 |
"OptOutCompleteBis": "Запомнете, че ако изтриете вашите бисквитки или ако смените компютъра или уеб браузъра ще е нужно да направите процедурата за отказ отново.",
|
|
|
|
|
|
|
|
|
627 |
"OptOutExplanation": "Matomo е ангажиран с осигуряването на поверителност в Интернет. За да позволите на потребителите си да се откажат от Matomo Web Analytics, можете да добавите нужният HTML код в една от вашите уеб страници, например в раздела Поверителност.",
|
|
|
628 |
"OptOutForYourVisitors": "Matomo отказ за вашите посетители",
|
|
|
|
|
629 |
"PiwikIsInstalledAt": "Matomo е инсталиран на",
|
630 |
-
"PluginSettingChangeNotAllowed": "
|
631 |
-
"
|
632 |
-
"
|
633 |
-
"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
634 |
"StableReleases": "Ако Matomo е критично важен за вашият бизнес, използвайте последната стабилна версия. Ако използвате последна бета и откриете бъг или имате предложение, моля %1$sвижте тук%2$s.",
|
|
|
635 |
"TrackAGoal": "Проследяване на цел",
|
636 |
"TrackingCode": "Код за проследяване",
|
637 |
-
"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
638 |
"TrustedHostSettings": "Доверено Matomoi хост име",
|
|
|
|
|
|
|
639 |
"UpdateSettings": "Настройки за обновяване",
|
640 |
"UseCustomLogo": "Използвайте изработено лого",
|
641 |
"ValidPiwikHostname": "Валидно Matomo хост име",
|
|
|
|
|
|
|
|
|
|
|
|
|
642 |
"WithOptionalRevenue": "с опция за приходите",
|
643 |
-
"
|
|
|
644 |
"YouMayOptOut": "Можете да изберете да нямате уникална уеб анализ бисквитка с идектификационен номер, свързан към вашият компютър, за да избегнете агрегацията на анализ на събраната информация на този уеб сайт.",
|
645 |
-
"YouMayOptOutBis": "За да направите този избор, моля кликнете долу за да получите биксвитката за отказване.",
|
646 |
"YouMayOptOut2": "Имате възможност да забраните Вашите действия да бъдат анализирани и свързани с Вас.",
|
647 |
-
"YouMayOptOut3": "Това ще защити Вашето лично пространство, но ще попречи на собственика да се обучи от Вашите действия и да подобри възможностите за обслужване за Вас и за други потребители."
|
|
|
648 |
},
|
649 |
"CoreHome": {
|
|
|
|
|
650 |
"CategoryNoData": "Няма данни в тази категория. Опитайте \"Включи всички данни\".",
|
|
|
|
|
|
|
651 |
"CheckForUpdates": "Проверка за обновления",
|
652 |
"CheckPiwikOut": "Проверка на Matomoi изход!",
|
653 |
-
"
|
|
|
|
|
|
|
|
|
654 |
"CloseWidgetDirections": "Можете да затворите тази джаджа, като кликнете на 'Х' иконата в горната част на джаджата.",
|
|
|
|
|
|
|
655 |
"DataForThisReportHasBeenPurged": "Датата на този доклад е стара с %s месеца и ще бъде изтрита.",
|
|
|
656 |
"DataTableExcludeAggregateRows": "Сумарните редове са показани %s Скриване",
|
|
|
657 |
"DataTableIncludeAggregateRows": "Сумарните редове са скрити %s Покажи ги",
|
|
|
|
|
658 |
"Default": "подразбиране",
|
|
|
659 |
"DonateCall1": "Matomo винаги ще бъде безплатен за използване, но това не означава, че ние нямаме разходи за развитието му.",
|
660 |
"DonateCall2": "Matomo се нуждае от вашата подкрепа, за да продължава да расте и процъфтява.",
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
661 |
"ExcludeRowsWithLowPopulation": "Всички редове са показани %s С изключение на тези с ниски стойности",
|
|
|
|
|
|
|
|
|
|
|
662 |
"ExternalHelp": "Помощ (отваря се в нов прозорец)",
|
663 |
"FlattenDataTable": "Този доклад е йерархичен %s Направете го плосък",
|
|
|
|
|
|
|
|
|
664 |
"IncludeRowsWithLowPopulation": "Редове с ниски стойности са скрити %s Покажи всички редове",
|
665 |
"InjectedHostEmailBody": "Здравейте, днес се опитах да достъпя Matomo и се натъкнах на предупреждение за неизвестно име на машината.",
|
666 |
"InjectedHostEmailSubject": "Matomo е бил достъпен чрез неизвестно име: %s",
|
667 |
-
"
|
|
|
668 |
"InjectedHostWarningIntro": "В момента достъпвате Matomo от %1$s, но Matomo е настроен да работи чрез този адрес: %2$s.",
|
669 |
-
"JavascriptDisabled": "JavaScript трябва да бъде разрешен за да използвате Matomo в стандартен изглед.<br
|
|
|
|
|
|
|
|
|
|
|
670 |
"Menu": "Меню",
|
|
|
671 |
"NoPrivilegesAskPiwikAdmin": "Вие се логнахте в като '%1$s' но изглежда че нямате разрешение от Matomo. %2$s Попитайте Вашият Matomo администратор (клик на email)%3$s да Ви даде \"поглед\" достъп до сайта.",
|
|
|
|
|
|
|
|
|
|
|
|
|
672 |
"PeriodRange": "Период",
|
|
|
|
|
|
|
|
|
|
|
|
|
673 |
"ReportGeneratedOn": "Доклада е генериран за %s",
|
674 |
"ReportGeneratedXAgo": "Доклада е генериран преди %s",
|
675 |
-
"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
676 |
"SharePiwikShort": "Matomo! Софтуер с отворен код за уеб анализ. Притежавайте вашите собствени данни.",
|
677 |
"ShareThis": "Сподели това",
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
678 |
"ShowJSCode": "Покажи JavaScript кода за вмъкване в сайта",
|
|
|
|
|
|
|
|
|
679 |
"SubscribeAndBecomePiwikSupporter": "Пристъпете към сигурната страница за плащане (PayPal) за да станете Matomo Supporter!",
|
680 |
"SupportPiwik": "Подкрепи Matomo!",
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
681 |
"TableNoData": "Няма данни за тази таблица.",
|
|
|
|
|
682 |
"ThereIsNoDataForThisReport": "Няма данни за този доклад.",
|
683 |
"UnFlattenDataTable": "Този доклад е плосък %s Направете го йерархичен",
|
|
|
684 |
"ViewAllPiwikVideoTutorials": "Виж всички Matomo помощни клипове",
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
685 |
"WebAnalyticsReports": "Уеб Анализи Доклади",
|
686 |
"YouAreUsingTheLatestVersion": "Вие използвате последна версия на Matomo!",
|
687 |
-
"
|
688 |
},
|
689 |
"CorePluginsAdmin": {
|
690 |
"ActionUninstall": "Деинсталиране",
|
691 |
"Activate": "Активирай",
|
|
|
692 |
"Activated": "Активиран",
|
693 |
"Active": "Активни",
|
694 |
"Activity": "Активност",
|
|
|
|
|
|
|
|
|
695 |
"AuthorHomepage": "Начало на автор",
|
|
|
|
|
696 |
"Changelog": "Списък с промените",
|
697 |
-
"
|
698 |
-
"
|
|
|
|
|
699 |
"Deactivate": "Деактивирай",
|
700 |
-
"DoMoreContactPiwikAdmins": "За да
|
|
|
701 |
"History": "История",
|
702 |
"Inactive": "Неактивни",
|
703 |
-
"InfoPluginUpdateIsRecommended": "
|
704 |
"InfoThemeIsUsedByOtherUsersAsWell": "Забележка: други %1$s потребители регистрирани в този Matomo също използват тапет %2$s.",
|
705 |
"InfoThemeUpdateIsRecommended": "Обновете вашите тапети, за да получите последната версия.",
|
706 |
-
"InstallNewPlugins": "Инсталиране на нови
|
707 |
"InstallNewThemes": "Добави нови тапети",
|
|
|
|
|
|
|
708 |
"LicenseHomepage": "Начало на лиценз",
|
709 |
-
"
|
710 |
-
"OncePluginIsInstalledYouMayActivateHere": "Веднъж инсталирана, добавката може да бъде активирана (пускана) или деактивирана (спирана).",
|
711 |
"MenuPlatform": "Платформа",
|
712 |
"MissingRequirementsNotice": "Моля, обновете %1$s %2$s до по-нова версия, %1$s %3$s се изисква.",
|
|
|
|
|
713 |
"NoZipFileSelected": "Моля, изберете zip файл.",
|
|
|
714 |
"NumUpdatesAvailable": "Налични са обновления %s",
|
|
|
715 |
"Origin": "Произход",
|
716 |
"OriginCore": "Ядро",
|
|
|
717 |
"OriginThirdParty": "Трета страна",
|
718 |
-
"
|
719 |
-
"
|
720 |
-
"
|
|
|
|
|
|
|
|
|
|
|
721 |
"PluginRequirement": "%1$s изисква %2$s.",
|
722 |
-
"
|
|
|
|
|
723 |
"Status": "Състояние",
|
724 |
"SuccessfullyActicated": "Успешно беше активирано <strong>%s<\/strong>.",
|
725 |
-
"
|
726 |
-
"TagManagerNowAvailableTitle": "Matomo Tag Manager вече е достъпен",
|
727 |
-
"ActivateTagManagerNow": "Активирайте Tag Manager сега",
|
728 |
-
"WhatIsTagManager": "Какво е Tag Manager?",
|
729 |
"TagManagerLearnMoreInUserGuide": "Научете повече в ръководството на Tag Manager",
|
730 |
-
"
|
731 |
-
"
|
|
|
|
|
|
|
|
|
|
|
|
|
732 |
"Theme": "Тапет",
|
733 |
"Themes": "Тапети",
|
734 |
"ThemesDescription": "Тапетите могат да променят въшншия вид на потребителския интерфейс на Matomo и да осигурят ново пълноценно визуално усещане, за да се насладите на Вашите статистики.",
|
735 |
"ThemesManagement": "Управление на тапетите",
|
736 |
-
"UninstallConfirm": "
|
|
|
737 |
"Version": "Версия",
|
738 |
-
"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
739 |
},
|
740 |
"CoreUpdater": {
|
741 |
-
"
|
|
|
742 |
"ClickHereToViewSqlQueries": "Кликнете тук за да видите и да копирате SQL заявките и командите в конзолата , които ще бъдат изпълнени.",
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
743 |
"CriticalErrorDuringTheUpgradeProcess": "Открита е КРИТИЧНА грешка по време на обновяването:",
|
744 |
"DatabaseUpgradeRequired": "Необходимо е да се обнови базата от данни (БД)",
|
745 |
-
"
|
|
|
746 |
"DownloadX": "Изтегляне %s",
|
747 |
"DownloadingUpdateFromX": "Изтегляне на обновлението от %s",
|
|
|
|
|
748 |
"EmptyDatabaseError": "Базата от данни (БД) %s е празна. Трябва да редактирате или изтриете конфигурационният файл на Matomo.",
|
749 |
"ErrorDIYHelp": "Ако сте напреднал потребител и попаднете на грешка при обновяване на базата от данни (БД):",
|
750 |
"ErrorDIYHelp_1": "открийте и редактирайте в конфигурационния файл (например, memory_limit или max_execution_time)",
|
751 |
"ErrorDIYHelp_2": "изпълни останалите заявки за обновяване от това поле",
|
752 |
"ErrorDIYHelp_3": "опцията `ръчно обновяване` на таблиците в Matomo базата от данни (БД), определяне на стойността на version_core на версията на провалилота се актуализация",
|
753 |
"ErrorDIYHelp_4": "повторно стартирайте обновлението (чрез браузъра или от командния ред) за да продължите с останалите обновления",
|
754 |
-
"ErrorDIYHelp_5": "изпратете този проблем и\\\/или решение на Matomo
|
755 |
-
"ErrorDuringPluginsUpdates": "
|
756 |
"ExceptionAlreadyLatestVersion": "Тази версия %s на Matomo е актуална.",
|
757 |
"ExceptionArchiveEmpty": "Празен архив.",
|
758 |
"ExceptionArchiveIncompatible": "Несъвместим архив: %s",
|
759 |
"ExceptionArchiveIncomplete": "Несъвместим архив: някои файлове липсват (например %s).",
|
|
|
|
|
760 |
"FeedbackRequest": "Не се колебайте да споделите вашите идеи и предложения с екипа на Matomo тук:",
|
761 |
"HelpMessageContent": "Проверете %1$s Често Задавани Въпроси (ЧЗВ) %2$s , където са обяснени възможните грешки по време на обновяването. %3$s Посъветвайте се с вашия системен администратор - те са в състояние да ви помогнат с грешка, която най-вероятно е свързана със сървъра или MySQL настройка.",
|
762 |
"HelpMessageIntroductionWhenError": "Открита е грешка в ядрото на Matomo. Ако имате нужда от допълнителна помощ моля обърнете се към нашия форум и\/или прочетете документацията:",
|
763 |
"HelpMessageIntroductionWhenWarning": "Актуализацията приключи успешно, но бяха открити грешки по време на процеса. Моля, прочетете документацията за допълнителна информация:",
|
764 |
"HighTrafficPiwikServerEnableMaintenance": "Ако управлявате сървър Matomo с голям трафик, препоръчваме %1$s за момент да деактивирате проследяването на посетители и да поставите потребителския интерфейс на Matomo в режим на поддръжка %2$s.",
|
|
|
765 |
"InstallingTheLatestVersion": "Инсталиране на последната версия",
|
|
|
|
|
|
|
|
|
|
|
|
|
766 |
"MajorUpdateWarning1": "Това е основна актуализация! Това ще отнеме малко повече от обичайното.",
|
767 |
"MajorUpdateWarning2": "Следният съвет е особено важен за големи инсталации.",
|
|
|
|
|
768 |
"NoteForLargePiwikInstances": "Важна бележка за големи Matomo инсталации",
|
769 |
-
"NotificationClickToUpdatePlugins": "
|
770 |
-
"NotificationClickToUpdateThemes": "
|
771 |
"NotificationSubjectAvailableCoreUpdate": "Налична е нова Matomo версия %s",
|
772 |
-
"NotificationSubjectAvailablePluginUpdate": "Налични
|
773 |
"PiwikHasBeenSuccessfullyUpgraded": "Matomo успешно е обновен!",
|
774 |
"PiwikUpdatedSuccessfully": "Обновлението на Matomo завърши успешно!",
|
775 |
"PiwikWillBeUpgradedFromVersionXToVersionY": "Matomo базата от данни (БД) ще бъде обновена от %1$s версия към %2$s.",
|
|
|
|
|
776 |
"ReadyToGo": "Готови ли сте?",
|
777 |
-
"
|
|
|
|
|
|
|
|
|
|
|
|
|
778 |
"TheUpgradeProcessMayFailExecuteCommand": "Ако имате голяма Matomo база данни, актуализирането и може да отнеме прекалено много време, ако я стартирате през Вашият браузър. В този случай, можете да извършите актуализацията чрез команден ред: %s",
|
779 |
"TheUpgradeProcessMayTakeAWhilePleaseBePatient": "Обновяването на базата от данни (БД) отнема известно време! Бъдете търпеливи...",
|
780 |
-
"ThereIsNewPluginVersionAvailableForUpdate": "Някои
|
781 |
-
"ThereIsNewVersionAvailableForUpdate": "
|
|
|
|
|
|
|
782 |
"UnpackingTheUpdate": "Разархивиране на обновлението",
|
783 |
"UpdateAutomatically": "Обновете автоматично",
|
|
|
784 |
"UpdateHasBeenCancelledExplanation": "Автоматичното обновяване на Matomo е отказано. Опитайте отново! Ако не успеете автоматично да обновите Matomo, опитайте ръчно. %1$s Моля прочетете %2$s документацията %3$s и продължете!",
|
785 |
"UpdateLog": "Дневник на актуализациите",
|
786 |
"UpdateSuccessTitle": "Matomo успешно е обновен!",
|
787 |
"UpdateTitle": "Обновления",
|
|
|
|
|
|
|
|
|
|
|
788 |
"UpgradeComplete": "Обновяването приключи!",
|
789 |
"UpgradePiwik": "Обновете Matomo",
|
|
|
|
|
|
|
790 |
"VerifyingUnpackedFiles": "Проверка на разархивираните файлове",
|
|
|
791 |
"WarningMessages": "Предупредителни съобщения:",
|
792 |
-
"WeAutomaticallyDeactivatedTheFollowingPlugins": "Автоматично
|
793 |
"YouCanUpgradeAutomaticallyOrDownloadPackage": "Можете да обновите автоматично към версия %s или да изтеглите обновлението и инсталирате ръчно:",
|
|
|
794 |
"YourDatabaseIsOutOfDate": "Базата от данни (БД) на Matomo е остаряла. Трябва да обновите преди да продължите нататък."
|
795 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
796 |
"DBStats": {
|
797 |
-
"DatabaseUsage": "Натоварване на БД",
|
798 |
-
"DataSize": "Данни (размер)",
|
799 |
"DBSize": "Размер на БД",
|
|
|
|
|
800 |
"EstimatedSize": "Ориентировъчен размер",
|
801 |
"IndexSize": "Индекс (размер)",
|
802 |
"LearnMore": "За да научите повече за това как Matomo обработва данни и колко добре работи за среден и висок трафик на уеб сайтове, проверете документацията %s.",
|
@@ -804,6 +1330,7 @@
|
|
804 |
"MetricDataByYear": "Метрични таблици за година",
|
805 |
"MetricTables": "Метрични таблици",
|
806 |
"OtherTables": "Други таблици",
|
|
|
807 |
"ReportDataByYear": "Годишен доклад на таблици",
|
808 |
"ReportTables": "Докладни таблици",
|
809 |
"RowCount": "Брой редове",
|
@@ -812,130 +1339,357 @@
|
|
812 |
"TrackerTables": "Таблици на тракера"
|
813 |
},
|
814 |
"Dashboard": {
|
815 |
-
"AddAWidget": "Добави
|
816 |
-
"AddPreviewedWidget": "Добави
|
817 |
"ChangeDashboardLayout": "Сменете изледа на таблото",
|
818 |
"CopyDashboardToUser": "Копиране на табло при потребител",
|
819 |
"CreateNewDashboard": "Направете ново табло",
|
820 |
"Dashboard": "Табло",
|
|
|
821 |
"DashboardCopied": "Настоящото табло е успешно копирано при избрания потребител.",
|
822 |
"DashboardEmptyNotification": "Вашето табло не съдържа никакви джаджи. Започнете с добавяне на някои джаджи или просто нулирайте таблото, за да изберете джаджите по подразбиране.",
|
823 |
"DashboardName": "Име на табло:",
|
824 |
"DashboardOf": "Табло за %s",
|
825 |
-
"DefaultDashboard": "Табло по подразбиране - Използвайте
|
826 |
-
"DeleteWidgetConfirm": "Наистина ли искате да изтриете
|
827 |
"EmptyDashboard": "Изпразнете таблото - Изберете любимите си джаджи",
|
828 |
-
"LoadingWidget": "Зарежда
|
829 |
"ManageDashboard": "Управлявате таблото",
|
830 |
"Maximise": "Максимизиране",
|
831 |
"Minimise": "Минимизиране",
|
832 |
-
"NotUndo": "Вие няма да можете да отмените тази
|
833 |
"PluginDescription": "Вашето табло за уеб анализи. Настройте вашия панел добавяйки нови джаджи, които можете да ги влачите, също така променяйки оформлението на колоните. Всеки потребител поотделно може да настрои своето табло.",
|
834 |
"RemoveDashboard": "Премахнете таблото",
|
835 |
"RemoveDashboardConfirm": "Сигурни ли сте че искате да премахнете таблото \"%s\"?",
|
|
|
836 |
"RenameDashboard": "Сменете името на таблото",
|
837 |
"ResetDashboard": "Зареди отново таблото",
|
838 |
"ResetDashboardConfirm": "Сигурен ли сте че искате да заредите отново плана на таблото с избраните по подразбиране джаджи?",
|
839 |
"SelectDashboardLayout": "Моля, изберете Вашият нов изглед на табло",
|
840 |
-
"SelectWidget": "Изберете
|
841 |
"SetAsDefaultWidgets": "Поставете по подразбиране избора на джаджи",
|
842 |
"SetAsDefaultWidgetsConfirm": "Сигурни ли сте, че искате да настроите настоящата селекция на джаджи и оформление на таблото по подразбиране?",
|
843 |
"SetAsDefaultWidgetsConfirmHelp": "Селекцията на джаджи и колоните на изгледа на таблото ще бъдат използвани, когато потребителят създаде ново табло, или когато \"%s\" функция е използвана.",
|
844 |
"TopLinkTooltip": "Вижте доклада за уеб анализи за %s.",
|
845 |
-
"WidgetNotFound": "
|
846 |
-
"WidgetPreview": "Преглед на
|
847 |
},
|
848 |
"DevicePlugins": {
|
849 |
-
"BrowserWithNoPluginsEnabled": "%1$s без
|
850 |
-
"BrowserWithPluginsEnabled": "%1$s с
|
851 |
-
"
|
852 |
-
"
|
|
|
|
|
853 |
},
|
854 |
"DevicesDetection": {
|
|
|
|
|
855 |
"BrowserEngine": "Браузър и версия",
|
856 |
"BrowserEngineDocumentation": "Тази таблица показва браузърите на вашите потребители ,разделени по фамилии. %s Най-важната информация за уеб разработчиците е какъв тип технология за обработка са използвали посетителите. Етикета показва имената на технологиите, следвани от браузера, който е бил използван, поставен в скоби.",
|
|
|
857 |
"BrowserFamily": "Фамилия браузъри",
|
858 |
-
"Browsers": "Браузъри",
|
859 |
"BrowserVersion": "Версия на браузъра",
|
860 |
"BrowserVersions": "Версии на браузъра",
|
|
|
861 |
"Camera": "Камера",
|
862 |
"CarBrowser": "Браузър, който се използва в кола",
|
|
|
|
|
863 |
"ColumnBrowser": "Браузър и версия",
|
864 |
"ColumnOperatingSystem": "Операционна система и версия",
|
|
|
865 |
"Console": "Конзола",
|
866 |
-
"dataTableLabelBrands": "Марка",
|
867 |
-
"dataTableLabelModels": "Модел",
|
868 |
-
"dataTableLabelSystemVersion": "Версия на операционната система",
|
869 |
-
"dataTableLabelTypes": "Тип",
|
870 |
"Device": "Устройство",
|
871 |
"DeviceBrand": "Марка на устройството",
|
|
|
|
|
872 |
"DeviceDetection": "Определяне на устройство",
|
873 |
"DeviceModel": "Модел на устройството",
|
874 |
-
"
|
|
|
875 |
"DeviceType": "Вид устройство",
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
876 |
"OperatingSystemFamilies": "Вид операционна система",
|
|
|
877 |
"OperatingSystemFamily": "Семейство на оперативната система",
|
878 |
-
"OperatingSystems": "Операционни системи",
|
879 |
"OperatingSystemVersions": "Версия на операционната система",
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
880 |
"SmartDisplay": "„Умен“ дисплей",
|
|
|
881 |
"Smartphone": "Смартфон",
|
882 |
-
"
|
883 |
-
"Tablet": "Таблет",
|
884 |
"TV": "ТВ",
|
|
|
|
|
|
|
|
|
885 |
"WidgetBrowsers": "Браузъри на посетителите",
|
886 |
-
"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
887 |
},
|
888 |
"Ecommerce": {
|
889 |
-
"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
890 |
},
|
891 |
"Events": {
|
|
|
892 |
"AvgValue": "Средна стойност",
|
|
|
|
|
893 |
"Event": "Събитие",
|
894 |
"EventAction": "Действие на събитието",
|
|
|
|
|
|
|
|
|
895 |
"EventCategory": "Категория на събитие",
|
896 |
"EventName": "Име на събитие",
|
|
|
|
|
|
|
|
|
|
|
|
|
897 |
"Events": "Събития",
|
|
|
|
|
|
|
|
|
|
|
898 |
"MaxValueDocumentation": "Максималната стойност за това събитие",
|
|
|
899 |
"MinValueDocumentation": "Минималната стойност за това събитие",
|
|
|
900 |
"SecondaryDimension": "Второстепенното измерение е %s.",
|
901 |
"SwitchToSecondaryDimension": "Превключване към %s",
|
902 |
"TopEvents": "Най-важните събития",
|
903 |
"TotalEvents": "Общо събития",
|
904 |
"TotalEventsDocumentation": "Общ брой събития",
|
|
|
905 |
"TotalValueDocumentation": "Сумата от стойностите за събитие",
|
906 |
"ViewEvents": "Преглед на събития"
|
907 |
},
|
908 |
"Feedback": {
|
|
|
|
|
|
|
909 |
"DoYouHaveBugReportOrFeatureRequest": "Желаете да докладвате за грешка или имате предложение?",
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
910 |
"IWantTo": "Желая да:",
|
911 |
"LearnWaysToParticipate": "Научете повече за начините, как бихте могли да %1$sучаствате%2$s",
|
912 |
"ManuallySendEmailTo": "Моля изпратете ръчно Вашето съобщение до",
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
913 |
"RateFeatureThankYouTitle": "Благодарим ви, че оценихте '%s'!",
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
914 |
"SendFeedback": "Изпрати съобщението",
|
915 |
"ThankYou": "Благодаря, че помогнахте да направим Matomo по-добър!",
|
|
|
|
|
|
|
916 |
"TopLinkTooltip": "Може да ни кажете какво мислите, както и да изискате професионална помощ.",
|
917 |
-
"
|
918 |
-
"
|
|
|
|
|
|
|
|
|
919 |
},
|
920 |
"GeoIp2": {
|
921 |
"AssumingNonApache": "Не може да бъде намерена apache_get_modules функцията, което предполага, че това не е Apache сървър.",
|
|
|
|
|
|
|
922 |
"CannotFindGeoIPServerVar": "Променливата %s не е зададена. Възможно е сървърът да не е настроен правилно.",
|
923 |
"CannotListContent": "Съдържанието за %1$s: %2$s не може да бъде заредено",
|
924 |
-
"
|
|
|
925 |
"DownloadNewDatabasesEvery": "Обновяване на базата от данни на всеки",
|
|
|
|
|
926 |
"FoundApacheModules": "Matomo откри следните Apache модули",
|
927 |
-
"GeoIPImplHasAccessTo": "Тази реализация на GeoIP има достъп до следните типове бази данни",
|
928 |
"GeoIPDatabases": "GeoIP база данни",
|
|
|
|
|
|
|
|
|
929 |
"GeoIPNoServerVars": "Matomo не може да намери GeoIP %s променливи.",
|
930 |
"GeoIPServerVarsFound": "Matomo засече следните GeoIP %s променливи",
|
931 |
-
"
|
|
|
|
|
|
|
932 |
"HowToInstallApacheModule": "Как да инсталирам GeoIP модул за Apache?",
|
933 |
"HowToInstallNginxModule": "Как се инсталира GeoIP модул за Nginx?",
|
|
|
|
|
|
|
|
|
|
|
|
|
934 |
"HttpServerModule": "HTTP сървърен модул",
|
935 |
-
"
|
936 |
"ISPDatabase": "ISP база данни",
|
|
|
|
|
|
|
|
|
937 |
"LocationDatabase": "Местоположение база данни",
|
938 |
"LocationDatabaseHint": "Базата от данни указваща местоположение е или за държава, регион или град.",
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
939 |
"UnsupportedArchiveType": "Типът архив %1$s не се поддържа.",
|
940 |
"UpdaterHasNotBeenRun": "Не е пускана до момента задача за обновяване.",
|
941 |
"UpdaterIsNotScheduledToRun": "Не е планирано да се изпълнява в бъдеще.",
|
@@ -949,14 +1703,21 @@
|
|
949 |
"AddNewGoal": "Добави нова цел",
|
950 |
"AddNewGoalOrEditExistingGoal": "%1$sДобави нова цел%2$s или %3$sРедактирай%4$s съществуващите цели",
|
951 |
"AllowGoalConvertedMoreThanOncePerVisit": "Позволи Целта да бъде конвертирана повече от веднъж за едно посещение",
|
952 |
-
"AllowMultipleConversionsPerVisit": "Разреши няколко конверсии за
|
|
|
953 |
"BestCountries": "Вашето най-добро конвертиране на страните е:",
|
954 |
"BestKeywords": "Вашите най-конвертиращи ключови думи:",
|
955 |
"BestReferrers": "Вашето най-добро конвертиране на посещения от сайтове е:",
|
|
|
956 |
"CaseSensitive": "Отчитане на съвпадения",
|
957 |
-
"CategoryTextReferrers_Referrers": "Референции",
|
958 |
"CategoryTextDevicesDetection_DevicesDetection": "Устройства",
|
|
|
|
|
|
|
|
|
959 |
"ClickOutlink": "натиснат върху връзката, водеща към външен сайт",
|
|
|
|
|
960 |
"ColumnAveragePriceDocumentation": "Средната печалба за този %s.",
|
961 |
"ColumnAverageQuantityDocumentation": "Средното количество за този %s продадени чрез поръчки от електронен магазин.",
|
962 |
"ColumnConversionRateDocumentation": "Брой конверсии за %s.",
|
@@ -964,6 +1725,7 @@
|
|
964 |
"ColumnConversions": "Конверсия",
|
965 |
"ColumnConversionsDocumentation": "Брой на конверсии за %s.",
|
966 |
"ColumnOrdersDocumentation": "Пълният брой поръчки, които съдържат %s поне веднъж.",
|
|
|
967 |
"ColumnPurchasedProductsDocumentation": "Броят на поръчаните продукти е сумата от всичкото количество продадени продукти във всички поръчки.",
|
968 |
"ColumnQuantityDocumentation": "Количеството е целият брой от продукти продаден за всеки %s.",
|
969 |
"ColumnRevenueDocumentation": "Общи приходи генерирани от %s.",
|
@@ -971,15 +1733,20 @@
|
|
971 |
"ColumnVisits": "Пълният брой на посещенията, независимо дали е задействана цел или не.",
|
972 |
"ColumnVisitsProductDocumentation": "Броят посещения на Продуктовата\/Категорийна страница. Това се използва също за да се изчисли %s степента на конверсия. Метричните данни са в отчета, ако изгледа Електронна търговия е бил настроен в Продукт\/Категория страниците.",
|
973 |
"Contains": "съдържа %s",
|
|
|
974 |
"ConversionByTypeReportDocumentation": "Този отчет дава детайлна информация относно развитието на целта (конверсии, степен на конверсията и приход от посещението) за всяка една от категориите, показани на левия панел. %1$s Моля натиснете на някоя от категориите, за да видите отчета. %2$s За повече информация, прочетете %3$sдокументацията за проследяване на целите на piwik.org%4$s",
|
975 |
"ConversionRate": "%s обменният курс",
|
976 |
"Conversions": "%s конверсия",
|
|
|
977 |
"ConversionsOverview": "Общ преглед на реализациите",
|
978 |
"ConversionsOverviewBy": "Преглед на конверсията по тип посещения",
|
979 |
"DaysToConv": "Дни към Конверсии",
|
980 |
-
"
|
|
|
981 |
"DefaultRevenueHelp": "Например, формуляр, предоставен от един посетител може да струва средно 10 долара. Matomo ще Ви помогне да разберете колко добре се представят Вашите посетители.",
|
|
|
982 |
"DeleteGoalConfirm": "Сигурни ли сте, че желаете да изтриете тази цел %s?",
|
|
|
983 |
"DocumentationRevenueGeneratedByProductSales": "Продажба на продукти. Изключва данък, доставка и отстъпка",
|
984 |
"Download": "Изтеглете файл",
|
985 |
"Ecommerce": "Електронна търговия",
|
@@ -988,6 +1755,8 @@
|
|
988 |
"EcommerceOrder": "Електронна търговия поръчка",
|
989 |
"EcommerceOverview": "Електронна търговия преглед",
|
990 |
"EcommerceReports": "Електронна търговия доклади",
|
|
|
|
|
991 |
"ExceptionInvalidMatchingString": "Ако изберете 'точно съвпадение', съвпадащият низ, трябва да започне с URL %1$s. Например, '%2$s'.",
|
992 |
"ExternalWebsiteUrl": "външен URL",
|
993 |
"Filename": "име на файла",
|
@@ -997,150 +1766,265 @@
|
|
997 |
"GoalIsTriggered": "Целта е задействана",
|
998 |
"GoalIsTriggeredWhen": "Целта е задействана, когато",
|
999 |
"GoalName": "Име на цел",
|
|
|
|
|
1000 |
"Goals": "Цели",
|
1001 |
-
"
|
|
|
1002 |
"GoalsOverview": "Общ преглед на целите",
|
1003 |
"GoalsOverviewDocumentation": "Това е преглед на конверсията на вашите цели. Поначало, графиката показва сумата от всички ваши конверсии. %s Под графиката ще видите отчетите за конверсия на всички ваши цели. Блестящите линии можете да уголемите като кликнете върху тях.",
|
1004 |
-
"
|
|
|
1005 |
"HelpOneConversionPerVisit": "Ако страница, съпадащата с тази Цел е обновена или гледана повече от веднъж за едно посещение, Целта ще бъде проследена само първият път.",
|
1006 |
"IsExactly": "е точно %s",
|
|
|
1007 |
"LeftInCart": "%s остатък в количката",
|
|
|
|
|
|
|
1008 |
"Manually": "ръчно",
|
1009 |
"ManuallyTriggeredUsingJavascriptFunction": "Целта е ръчно задействана с помощта на JavaScript API trackGoal()",
|
1010 |
"MatchesExpression": "съответства на изразените %s",
|
|
|
|
|
|
|
|
|
|
|
1011 |
"NewVisitorsConversionRateIs": "Стойност на конверсията от новите посетители е %s",
|
|
|
|
|
1012 |
"Optional": "(по избор)",
|
|
|
|
|
|
|
1013 |
"PageTitle": "Заглавие на страница",
|
1014 |
"Pattern": "Модел",
|
|
|
1015 |
"ProductCategory": "Категория на продукт",
|
1016 |
"ProductName": "Име на продукт",
|
1017 |
-
"
|
|
|
|
|
1018 |
"ProductSKU": "SKU на продукта",
|
|
|
|
|
1019 |
"ReturningVisitorsConversionRateIs": "Стойност на конверсията от върналите се посетители е %s",
|
|
|
1020 |
"SingleGoalOverviewDocumentation": "Това е преглед на конверсиите за една цел. %s Блестящите линии могат да бъдат уголемени като кликнете върху тях.",
|
1021 |
-
"
|
|
|
1022 |
"URL": "URL",
|
|
|
|
|
1023 |
"ViewAndEditGoals": "Виж и редактирай цели",
|
|
|
|
|
1024 |
"VisitPageTitle": "Посещения по заглавие на страница",
|
1025 |
-
"VisitsUntilConv": "Посещения към Конверсии",
|
1026 |
"VisitUrl": "посетят определен URL (страница или група от страници)",
|
|
|
|
|
1027 |
"WhenVisitors": "когато посетителите",
|
1028 |
"WhereThe": "където",
|
|
|
1029 |
"YouCanEnableEcommerceReports": "Можете да включите %1$s за този уебсайт в %2$s страницата."
|
1030 |
},
|
1031 |
"ImageGraph": {
|
1032 |
-
"ColumnOrdinateMissing": "Колоната '%1$s' не е намерена в този доклад. Опитайте с %2$s"
|
|
|
1033 |
},
|
1034 |
"Insights": {
|
1035 |
"ControlComparedToDescription": "Ръст спрямо",
|
|
|
|
|
1036 |
"DayComparedToPreviousDay": "предишен ден",
|
1037 |
"DayComparedToPreviousWeek": "същия ден през предходната седмица",
|
1038 |
"DayComparedToPreviousYear": "същия ден през предходната година",
|
1039 |
"Filter": "Филтър",
|
|
|
|
|
|
|
|
|
|
|
1040 |
"FilterOnlyNew": "Само нови",
|
|
|
1041 |
"MonthComparedToPreviousMonth": "предишен месец",
|
1042 |
"MonthComparedToPreviousYear": "същия месец на предходната година",
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1043 |
"TitleRowDisappearedDetails": "'%1$s' намалял с %2$s и изчезна в %3$s сравнено с %4$s.",
|
|
|
|
|
1044 |
"WeekComparedToPreviousWeek": "предишна седмица",
|
|
|
1045 |
"YearComparedToPreviousYear": "предишна година"
|
1046 |
},
|
1047 |
"Installation": {
|
1048 |
-
"
|
1049 |
-
"
|
|
|
|
|
|
|
1050 |
"Congratulations": "Поздравления",
|
|
|
|
|
|
|
1051 |
"DatabaseAbilities": "Възможности на базата данни",
|
1052 |
"DatabaseCreation": "БД създаване",
|
1053 |
-
"DatabaseErrorConnect": "
|
1054 |
-
"DatabaseServerVersion": "
|
1055 |
"DatabaseSetup": "Настройки на базата от данни (БД)",
|
1056 |
"DatabaseSetupAdapter": "адаптер",
|
1057 |
"DatabaseSetupDatabaseName": "БД име",
|
1058 |
"DatabaseSetupLogin": "вход",
|
1059 |
"DatabaseSetupServer": "БД сървър",
|
1060 |
"DatabaseSetupTablePrefix": "префикс на таблицата",
|
|
|
|
|
|
|
1061 |
"Email": "Имейл",
|
|
|
1062 |
"Extension": "разширения",
|
|
|
1063 |
"Filesystem": "Файлова система",
|
1064 |
"GetInvolved": "Ако харесвате това, което виждате, може да се %1$sвключите%2$s.",
|
1065 |
-
"GoBackAndDefinePrefix": "Върнете се
|
1066 |
"HappyAnalysing": "Приятно анализиране!",
|
|
|
|
|
1067 |
"Installation": "Инсталация",
|
1068 |
"InstallationStatus": "Състояние на инсталацията",
|
1069 |
-
"InsufficientPrivilegesHelp": "
|
1070 |
-
"
|
|
|
|
|
1071 |
"JSTracking_Intro": "За да може да се осъществи проследяване на трафика посредством Matomo, е нужно да се добави допълнителен код във всяка от вашите страници.",
|
1072 |
-
"
|
|
|
1073 |
"Legend": "Легенда",
|
|
|
|
|
1074 |
"NfsFilesystemWarning": "Вашият сървър ползва NFS файлова система.",
|
1075 |
-
"NfsFilesystemWarningSuffixAdmin": "Това означава, че Matomo ще бъде изключително бавен, когато
|
|
|
|
|
|
|
1076 |
"Optional": "По избор",
|
1077 |
"Password": "Парола",
|
1078 |
-
"PasswordDoNotMatch": "
|
1079 |
"PasswordRepeat": "Парола (повторно)",
|
1080 |
-
"PercentDone": "%s %%
|
|
|
|
|
|
|
|
|
|
|
1081 |
"PleaseFixTheFollowingErrors": "Моля, поправете следните грешки",
|
|
|
|
|
|
|
|
|
1082 |
"Requirements": "Matomo Изисквания",
|
1083 |
"RestartWebServer": "След като направите промените, рестартирайте уеб сървара.",
|
1084 |
-
"
|
1085 |
-
"
|
1086 |
-
"
|
1087 |
-
"
|
1088 |
-
"
|
1089 |
-
"
|
|
|
|
|
|
|
1090 |
"SuperUser": "Супер потребител",
|
1091 |
-
"
|
1092 |
-
"
|
|
|
1093 |
"SystemCheck": "Проверка на системата",
|
1094 |
-
"SystemCheckAutoUpdateHelp": "Забележка: Matomo
|
1095 |
-
"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1096 |
"SystemCheckDebugBacktraceHelp": "View::factory няма да бъде в състояние да създаде мнение за извикване на модул.",
|
1097 |
-
"SystemCheckError": "
|
1098 |
-
"SystemCheckEvalHelp": "Изисква се от HTML QuickForm и
|
1099 |
"SystemCheckExtensions": "Други необходими разширения",
|
1100 |
"SystemCheckFileIntegrity": "Файл целостта",
|
|
|
1101 |
"SystemCheckFunctions": "Необходими функции",
|
1102 |
-
"SystemCheckGDFreeType": "GD
|
1103 |
"SystemCheckGDHelp": "„Блещукащите линии“ (малки графики) и графичните диаграми (в Matomo Mobile приложението и докладите по пощата), няма да работят.",
|
1104 |
-
"SystemCheckGlobHelp": "
|
1105 |
-
"SystemCheckGzcompressHelp": "Трябва да активирате zlib и gzcompress
|
1106 |
-
"SystemCheckGzuncompressHelp": "Трябва да активирате zlib и
|
1107 |
-
"
|
|
|
|
|
1108 |
"SystemCheckMemoryLimit": "Лимит на паметта",
|
1109 |
"SystemCheckMemoryLimitHelp": "За силно натоварените сайтове, времето за архивиране на данните отнема повече ресурси. Ако е необходимо моля редактирайте memory_limit директивата в php.ini.",
|
|
|
|
|
1110 |
"SystemCheckOpenURL": "Отворен адрес(URL)",
|
1111 |
-
"SystemCheckOpenURLHelp": "Новините, съобщенията за обновления и автоматичното обновяване за да функционират е необходимо сървъра да поддържа \"
|
1112 |
"SystemCheckOtherExtensions": "Други разширения",
|
1113 |
"SystemCheckOtherFunctions": "Други функции",
|
1114 |
-
"SystemCheckPackHelp": "Функцията
|
1115 |
-
"
|
1116 |
-
"
|
|
|
|
|
1117 |
"SystemCheckPhp": "PHP версия",
|
1118 |
"SystemCheckPhpPdoAndMysqli": "Повече информация: %1$sPHP PDO%2$s и %3$sMYSQLI%4$s.",
|
1119 |
-
"
|
1120 |
-
"
|
1121 |
-
"
|
|
|
|
|
|
|
|
|
|
|
1122 |
"SystemCheckTracker": "Статус на проследяване",
|
1123 |
-
"
|
1124 |
-
"
|
|
|
|
|
|
|
|
|
1125 |
"SystemCheckWarnLibXmlHelp": "Трябва да включите \"libxml\" разширението (напр. \"install the php-libxml package\"), тъй като това е нужно на други главни PHP разширения.",
|
|
|
1126 |
"SystemCheckWarnSimpleXMLHelp": "Трябва да включите \"SimpleXML\" разширенето (напр: install the \"php-simplexml\" и\/или \"php-xml\" пакета).",
|
|
|
1127 |
"SystemCheckWinPdoAndMysqliHelp": "За Windows сървър добавете следните редове в php.ini: %s",
|
1128 |
"SystemCheckWriteDirs": "Директории с права за писане",
|
1129 |
"SystemCheckWriteDirsHelp": "За да поправите тази грешка (на Linux сървър), опитайте със следните команди",
|
1130 |
-
"SystemCheckZlibHelp": "
|
1131 |
-
"NotSupported": "не се поддържа",
|
1132 |
"Tables": "Създаване на таблици",
|
1133 |
-
"TablesCreatedSuccess": "Таблиците са създадени
|
1134 |
"TablesDelete": "Изтрий съществуващите таблици",
|
1135 |
-
"TablesDeletedSuccess": "Съществуващите Matomo таблици бяха изтрити
|
1136 |
-
"TablesFound": "Следните таблици бяха
|
1137 |
"TablesReuse": "Използвай съществуващите таблици",
|
1138 |
-
"TablesUpdatedSuccess": "Базата
|
1139 |
-
"TablesWarningHelp": "
|
1140 |
-
"TablesWithSameNamesFound": "Някои %1$s
|
1141 |
-
"
|
1142 |
-
"
|
1143 |
-
"
|
|
|
|
|
|
|
1144 |
},
|
1145 |
"Intl": {
|
1146 |
"Continent_afr": "Африка",
|
@@ -2242,6 +3126,7 @@
|
|
2242 |
"Timezone_Pacific_Gambier": "Гамбие",
|
2243 |
"Timezone_Pacific_Honolulu": "Хонолулу",
|
2244 |
"Timezone_Pacific_Johnston": "Джонстън",
|
|
|
2245 |
"Timezone_Pacific_Kiritimati": "Киритимати",
|
2246 |
"Timezone_Pacific_Kosrae": "Кошрай",
|
2247 |
"Timezone_Pacific_Kwajalein": "Куаджалин",
|
@@ -2258,244 +3143,688 @@
|
|
2258 |
"Year_Short": "г.",
|
2259 |
"Yesterday": "Вчера"
|
2260 |
},
|
|
|
|
|
|
|
|
|
|
|
2261 |
"LanguagesManager": {
|
2262 |
-
"AboutPiwikTranslations": "За Matomo преводите"
|
|
|
2263 |
},
|
2264 |
"Live": {
|
|
|
2265 |
"AveragePageGenerationTime": "Всяка страница отнема средно по %1$s, за да бъде заредена от този посетител.",
|
2266 |
-
"
|
|
|
|
|
|
|
2267 |
"ConvertedNGoals": "Конвертирани %s цели",
|
|
|
|
|
|
|
|
|
2268 |
"FirstVisit": "Първо посещение",
|
2269 |
"GoalType": "Тип",
|
2270 |
"HideMap": "скриване на картата",
|
|
|
2271 |
"LastHours": "Последните %s часа",
|
2272 |
"LastMinutes": "Последните %s минути",
|
2273 |
"LastVisit": "Последно посещение",
|
|
|
|
|
|
|
2274 |
"LoadMoreVisits": "Зареждане на повече посещения",
|
2275 |
"MorePagesNotDisplayed": "повечето страници от този посетител не се показват",
|
2276 |
"NbVisitor": "1 посетител",
|
2277 |
"NbVisitors": "%s посетители",
|
2278 |
"NextVisitor": "Следващ посетител",
|
2279 |
"NoMoreVisits": "Няма повече посещения за този посетител.",
|
|
|
|
|
2280 |
"PageRefreshed": "Броят пъти, които тази страница е гледана \/ обновена в ред.",
|
|
|
2281 |
"PreviousVisitor": "Предишен посетител",
|
2282 |
-
"
|
|
|
|
|
|
|
|
|
|
|
2283 |
"RealTimeVisitorCount": "Броене на посетителите в реално време",
|
|
|
2284 |
"Referrer_URL": "URL Референции",
|
|
|
|
|
|
|
|
|
|
|
2285 |
"ShowMap": "покажи картата",
|
2286 |
-
"SimpleRealTimeWidget_Message": "%1$s и %2$s в
|
|
|
|
|
2287 |
"ViewVisitorProfile": "Преглед профила на посетителя",
|
|
|
|
|
2288 |
"VisitedPages": "Посетени страници",
|
|
|
2289 |
"VisitorLogDocumentation": "Тази таблица показва последните посещения, включени в избраният обхват от време. Можете да видите кога се е случило последното посещение на посетител, като посочите върху датата на посещението. %1$s Ако обхвата на датата включва днешния ден, можете да видите вашите посетители в реално време! %2$s Информацията тук винаги е в реално време, независимо дали и колко често използвате инструментите за архивиране.",
|
|
|
|
|
|
|
|
|
2290 |
"VisitorProfile": "Профил на посетителя",
|
2291 |
"VisitorsInRealTime": "Посещения в реално време",
|
2292 |
"VisitorsLastVisit": "Последното посещение от този посетител беше от преди %s дни.",
|
2293 |
-
"VisitsFrom": "%1$s%2$s посещения%3$s от"
|
|
|
2294 |
},
|
2295 |
"Login": {
|
|
|
|
|
|
|
|
|
|
|
|
|
2296 |
"ConfirmationLinkSent": "Изпратена е връзка за потвърждение. Проверете пощенската си кутия, за да потвърдите заявката за смяна на парола.",
|
|
|
|
|
|
|
|
|
|
|
2297 |
"ExceptionPasswordMD5HashExpected": "Параметърът на паролата се очаква да бъде MD5 хеш на парола.",
|
2298 |
-
"
|
2299 |
-
"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2300 |
"LogIn": "Вход",
|
2301 |
-
"
|
|
|
|
|
|
|
2302 |
"LostYourPassword": "Забравена парола?",
|
|
|
2303 |
"MailTopicPasswordChange": "Потвърждение смяната на паролата",
|
|
|
|
|
|
|
2304 |
"PasswordChanged": "Вашата парола е сменена.",
|
2305 |
"PasswordRepeat": "Парола (повторно)",
|
|
|
2306 |
"PasswordsDoNotMatch": "Паролите не съвпадат.",
|
2307 |
-
"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2308 |
},
|
2309 |
"Marketplace": {
|
2310 |
-
"
|
2311 |
-
"ActionActivatePlugin": "Активиране на добавка",
|
2312 |
"ActionActivateTheme": "Активирай тапет",
|
2313 |
"ActionInstall": "Инсталиране",
|
2314 |
-
"
|
|
|
|
|
|
|
2315 |
"Authors": "Автори",
|
2316 |
-
"
|
2317 |
"BackToMarketplace": "Връщане към магазина за приложения",
|
|
|
2318 |
"BrowseMarketplace": "Разгледайте магазина",
|
2319 |
"ByXDevelopers": "от %s разработчици",
|
|
|
|
|
|
|
|
|
|
|
2320 |
"Developer": "Разработчик",
|
2321 |
-
"
|
2322 |
-
"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2323 |
"InstallingPlugin": "Инсталира се %s",
|
2324 |
"LastCommitTime": "(последен принос %s)",
|
2325 |
"LastUpdated": "Последно обновена",
|
2326 |
-
"
|
2327 |
-
"
|
2328 |
-
"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2329 |
"NoThemesFound": "Не са намерени тапети",
|
|
|
|
|
|
|
|
|
2330 |
"NumDownloadsLatestVersion": "Последна версия:%s сваляния",
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2331 |
"PluginKeywords": "Ключови думи",
|
|
|
|
|
|
|
2332 |
"PluginUpdateAvailable": "Използва се версия %1$s и е налична нова версия %2$s.",
|
|
|
2333 |
"PluginVersionInfo": "%1$s от %2$s",
|
2334 |
-
"PluginWebsite": "Сайт за
|
|
|
|
|
|
|
|
|
2335 |
"Screenshots": "Екранни снимки",
|
2336 |
-
"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2337 |
"StepDownloadingThemeFromMarketplace": "Сваляне на тапет от магазина за приложения",
|
2338 |
-
"
|
2339 |
-
"
|
2340 |
-
"
|
2341 |
-
"StepPluginSuccessfullyInstalled": "Успешно е инсталирана добавка %1$s %2$s.",
|
2342 |
-
"StepPluginSuccessfullyUpdated": "Успешно е обновена добавка %1$s %2$s.",
|
2343 |
-
"StepReplaceExistingPlugin": "Подмяна на съществуваща добавка",
|
2344 |
"StepReplaceExistingTheme": "Замяна на съществуващ тапет",
|
|
|
2345 |
"StepThemeSuccessfullyUpdated": "Вие успешно обновихте тапет %1$s %2$s.",
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2346 |
"SubscriptionType": "Тип",
|
2347 |
"Support": "Поддръжка",
|
|
|
2348 |
"TeaserExtendPiwikByUpload": "Разширяване на възможностите на Matomo, чрез добавяне на zip файл",
|
|
|
|
|
2349 |
"Updated": "Обновени",
|
|
|
|
|
2350 |
"UploadZipFile": "Качване на zip файл",
|
2351 |
-
"ViewRepositoryChangelog": "Преглед на промените"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2352 |
},
|
2353 |
"MobileMessaging": {
|
|
|
2354 |
"Exception_UnknownProvider": "Името на доставчика '%1$s' е неизвестно. Пробвайте друго име вместо: %2$s.",
|
2355 |
"MobileReport_AdditionalPhoneNumbers": "Могат да бъдат добавени повече телефонни номера достъпвайки",
|
2356 |
"MobileReport_MobileMessagingSettingsLink": "Страницата за настройка на мобилните съобщения",
|
2357 |
"MobileReport_NoPhoneNumbers": "Моля, активирайте поне един телефонен номер, достъпвайки",
|
|
|
2358 |
"PhoneNumbers": "Телефонни номера",
|
|
|
|
|
|
|
2359 |
"Settings_APIKey": "API ключ",
|
2360 |
"Settings_CountryCode": "Код на държавата",
|
|
|
2361 |
"Settings_CredentialNotProvided": "Преди да можете да създавате и управлявате телефонни номера, моля свържете Matomo с вашия SMS профил по-горе.",
|
2362 |
"Settings_CredentialNotProvidedByAdmin": "Преди да можете да добавяте и управлявате телефонни номера, моля, свържете се с вашия администратор, за да свърже Matomo с SMS профил.",
|
2363 |
"Settings_CredentialProvided": "Вашият %s SMS приложно-програмен интерфейсен профил е правилно настроен!",
|
2364 |
-
"
|
2365 |
"Settings_DelegatedSmsProviderOnlyAppliesToYou": "Така посоченият доставчик на SMS услуги ще бъде ползван само от вас. Други потребители няма да могат да го ползват.",
|
|
|
|
|
2366 |
"Settings_InvalidActivationCode": "Въведеният код не е валиден, моля опитайте отново.",
|
2367 |
"Settings_LetUsersManageAPICredential": "Позволява на потребителите да управляват своите собствени идентификационни данни за SMS API",
|
|
|
|
|
2368 |
"Settings_ManagePhoneNumbers": "Управление на телефонните номера",
|
2369 |
"Settings_PhoneActivated": "Телефонният номер е потвърден! Вече имате възможност да получавате кратки съобщения (SMS) с вашите статистики.",
|
2370 |
"Settings_PhoneNumber": "Телефонен номер",
|
2371 |
"Settings_PhoneNumbers_Add": "Добави нов телефонен номер",
|
|
|
|
|
|
|
|
|
2372 |
"Settings_SMSAPIAccount": "Управление на профила за SMS приложно-програмен интерфейс",
|
2373 |
"Settings_SMSProvider": "Доставчик на SMS услуги",
|
|
|
2374 |
"Settings_SuperAdmin": "Настройки на супер потребителя",
|
2375 |
"Settings_SuspiciousPhoneNumber": "Ако не получите текстовото съобщение, може да опитате без водещата нула. т.е. %s",
|
2376 |
"Settings_UpdateOrDeleteAccount": "%1$sОбновяване%2$s или %3$sизтриване%4$s на този профил.",
|
2377 |
"Settings_ValidatePhoneNumber": "Валидиране",
|
2378 |
"Settings_VerificationCodeJustSent": "Изпратихме ви код със SMS на посочения номер, моля, въведете кода по-горе и натиснете \"Валидиране\".",
|
2379 |
-
"
|
2380 |
-
"TopLinkTooltip": "Вземете Web Analytics Reports доставен във вашата пощенска кутия или във вашия мобилен телефон!",
|
2381 |
"TopMenu": "Доклади по имейл и SMS",
|
2382 |
-
"
|
|
|
2383 |
},
|
2384 |
"MultiSites": {
|
|
|
2385 |
"Evolution": "Развитие",
|
|
|
|
|
|
|
|
|
|
|
|
|
2386 |
"LoadingWebsites": "Зарежда сайтовете",
|
|
|
|
|
2387 |
"TopLinkTooltip": "Сравнете статистиката за всички ваши уебсайтове."
|
2388 |
},
|
2389 |
"Overlay": {
|
2390 |
"Clicks": "%s клика",
|
2391 |
-
"ClicksFromXLinks": "%1$s
|
2392 |
"Domain": "Домейн",
|
|
|
|
|
2393 |
"ErrorNotLoadingDetails": "Възможно е заредената страница вдясно да няма последяващия Matomo код. В този случай опитайте да стартирате нова връзка за различна страница от доклада на страници.",
|
2394 |
-
"
|
|
|
2395 |
"Link": "Връзка",
|
2396 |
"Location": "Местоположение",
|
2397 |
"NoData": "Няма данни за тази страница по време на избрания период.",
|
2398 |
"OneClick": "1 клик",
|
2399 |
"OpenFullScreen": "Цял екран (без странична лента)",
|
|
|
|
|
|
|
2400 |
"RedirectUrlErrorAdmin": "Може да добавите домейнът като допълнителен адрес %1$sв настройките%2$s.",
|
2401 |
"RedirectUrlErrorUser": "Попитайте вашият администратор да добави домейна, като допълнителен URL."
|
2402 |
},
|
2403 |
"PagePerformance": {
|
2404 |
-
"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2405 |
},
|
2406 |
"PrivacyManager": {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2407 |
"AnonymizeIpInlineHelp": "Скрива последните цифри на IP адреса на посетителя, за да бъде спазен закона за поверителност.",
|
|
|
2408 |
"AnonymizeIpMaskLengtDescription": "Изберете колко байта от IP на посетителите да е маскирано.",
|
2409 |
"AnonymizeIpMaskLength": "%1$s байта - пример %2$s",
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2410 |
"ClickHereSettings": "Натиснете тук, за да влезете в %s настройките.",
|
|
|
2411 |
"CurrentDBSize": "Настоящ размер на базата данни",
|
2412 |
"DBPurged": "Базата от данни е изтрита.",
|
|
|
|
|
|
|
|
|
|
|
|
|
2413 |
"DeleteDataInterval": "Изтрий стара информация на всеки",
|
2414 |
-
"
|
2415 |
"DeleteLogDescription2": "Ако включите автоматичното изтриване на логове, трябва да сте сигурни, че всичките предишни дневни отчети са били преработени, за да не се изгуби информация.",
|
|
|
2416 |
"DeleteLogsOlderThan": "Изтрий отчети по-стари от",
|
2417 |
"DeleteMaxRows": "Максималният брой редове, които да бъдат изтрити на един път:",
|
2418 |
"DeleteMaxRowsNoLimit": "без лимит",
|
|
|
|
|
|
|
|
|
2419 |
"DeleteReportsConfirm": "На път сте да включите изтриване на отчетите. Ако старите отчети са изтрити, вие ще трябвате да ги изготвите наново за да ги видите. Сигурни ли сте, че искате да направите това?",
|
|
|
|
|
2420 |
"DeleteReportsOlderThan": "Изтрива отчети по-стари от",
|
2421 |
-
"
|
|
|
|
|
|
|
2422 |
"DoNotTrack_Description": "Не проследявай е технология и предложение, което позволява отказ от проследяване на сайтове, които те не посещават; включително инструменти за анализ, рекламни мрежи и социални платформи.",
|
2423 |
-
"DoNotTrack_Disable": "Изключете \"Не проследявай\"
|
2424 |
-
"
|
|
|
|
|
2425 |
"DoNotTrack_Enabled": "Понастоящем вие уважавате поверителността на вашите потребители. Браво!",
|
2426 |
-
"
|
|
|
2427 |
"EstimatedDBSizeAfterPurge": "Изчислен размер на базата данни след изтриване",
|
2428 |
"EstimatedSpaceSaved": "Изчислено спестено място",
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2429 |
"GdprManager": "Управление на GDPR",
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2430 |
"GetPurgeEstimate": "Изчисляване на времето за изтриване",
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2431 |
"KeepBasicMetrics": "Запазване на основните данни (посещения, посещения на страници, степен на отпадане, цели, конверсия при електронна търговия и др.)",
|
2432 |
-
"
|
|
|
|
|
|
|
2433 |
"LastDelete": "Последното изтриване е било на",
|
2434 |
"LeastDaysInput": "Моля укажете номер на дни по голям от %s.",
|
2435 |
"LeastMonthsInput": "Моля укажете номер на месеци по-голям от %s.",
|
|
|
2436 |
"MenuPrivacySettings": "Поверителност",
|
2437 |
"NextDelete": "Следващото планирано изтриване е на",
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2438 |
"PurgeNow": "Изтриване на базата данни СЕГА",
|
2439 |
"PurgeNowConfirm": "Вие сте на път перманентно да изтриете информацията от вашата база данни. Сигурни ли сте, че искате да продължите?",
|
2440 |
"PurgingData": "Изтриване на базата данни...",
|
|
|
|
|
|
|
2441 |
"ReportsDataSavedEstimate": "Размер на базата данни",
|
|
|
|
|
|
|
|
|
2442 |
"SaveSettingsBeforePurge": "Вие променихте настройките за изтриване на информация. Моля запазете ги, преди да започнете изтриване.",
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2443 |
"TeaserHeadline": "Настройки на поверителността",
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2444 |
"UseAnonymizeIp": "Правене на IP-тата на посетителите анонимни",
|
|
|
|
|
|
|
|
|
|
|
2445 |
"UseDeleteLog": "Редовно изтриване на стари данни от базата данни",
|
2446 |
-
"UseDeleteReports": "Периодично изтрива старите посетителски отчети от базата данни"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2447 |
},
|
2448 |
"Referrers": {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2449 |
"Campaigns": "Кампании",
|
2450 |
"CampaignsDocumentation": "Посетители, дошли до вашият уеб сайт, в резултат на камания. %1$s Погледнете %2$s отчета за повече детайли.",
|
|
|
|
|
2451 |
"ColumnCampaign": "Кампании",
|
2452 |
"ColumnSearchEngine": "Търсещи машини",
|
2453 |
"ColumnSocial": "Социална мрежа",
|
2454 |
"ColumnWebsite": "Сайт",
|
2455 |
"ColumnWebsitePage": "Интернет страница",
|
2456 |
"DirectEntry": "Директни посещения",
|
|
|
|
|
2457 |
"DistinctCampaigns": "отделни кампании",
|
2458 |
"DistinctKeywords": "отделни ключови думи",
|
2459 |
"DistinctSearchEngines": "отделни търсещи машини",
|
|
|
|
|
2460 |
"DistinctWebsites": "отделни сайтове",
|
|
|
|
|
2461 |
"EvolutionDocumentation": "Това е преглед на препращащите сайтове, които са довели посетители до вашият уеб сайт.",
|
|
|
|
|
2462 |
"Keywords": "Ключови думи",
|
2463 |
"KeywordsReportDocumentation": "Този отчет показва кои ключови думи потребителите са използвали преди да бъдат препратени към вашият уеб сайт. %s Ако кликнете върху реда в таблицата, можете да видите разпределението на търсачките, в които са били търсени тези ключови думи.",
|
|
|
|
|
|
|
|
|
2464 |
"Referrer": "Препоръчител",
|
2465 |
"ReferrerName": "Име на референт",
|
|
|
|
|
|
|
2466 |
"Referrers": "Референции",
|
2467 |
"ReferrersOverview": "Преглед на препоръчителите",
|
|
|
|
|
|
|
2468 |
"SearchEngines": "Търсачки",
|
2469 |
"SearchEnginesDocumentation": "Посетител, който е бил препратен към вашият уеб сайт от търсачка. %1$s Погледнете %2$s отчета за повече детайли.",
|
2470 |
"SearchEnginesReportDocumentation": "Този отчет показва кои търсачки са изпратили потребители към вашият уеб сайт. %s Ако кликнете върху реда в таблицата, можете да видите какво потребителите са търсили в конкретната търсачка.",
|
|
|
|
|
2471 |
"Socials": "Социални мрежи",
|
2472 |
-
"
|
|
|
|
|
2473 |
"SubmenuWebsitesOnly": "Сайтове",
|
|
|
2474 |
"TypeCampaigns": "%s от кампании",
|
2475 |
"TypeDirectEntries": "%s директни посещения",
|
|
|
2476 |
"TypeSearchEngines": "%s от търсещите машини",
|
|
|
2477 |
"TypeWebsites": "%s от сайтове",
|
|
|
|
|
|
|
2478 |
"UsingNDistinctUrls": "(използват се %s различни адреса)",
|
2479 |
"ViewAllReferrers": "Преглед на всички препоръчители",
|
2480 |
"ViewReferrersBy": "Преглед на всички препоръчители по %s",
|
|
|
|
|
|
|
|
|
|
|
2481 |
"Websites": "Сайтове",
|
2482 |
"WebsitesDocumentation": "Посетителят е последвал връзка в друг сайт, която сочи към вашия сайт. %1$s Вижте %2$s отчета за повече детайли.",
|
2483 |
"WebsitesReportDocumentation": "В тази таблица, можете да видите кои уеб сайтове са препратили посетители към вашият сайт. %s Ако кликнете върху реда в таблицата, можете да видите URL-ите, чрез които потребителите са стигнали до вашият сайт.",
|
|
|
|
|
2484 |
"WidgetExternalWebsites": "Външни сайтове",
|
|
|
2485 |
"WidgetSocials": "Списък на социалните мрежи",
|
2486 |
"WidgetTopKeywordsForPages": "Най-използваните ключови думи",
|
2487 |
-
"XPercentOfVisits": "%s от посещения"
|
2488 |
-
"Acquisition": "Придобиване",
|
2489 |
-
"VisitorsFromDirectEntry": "Посетители с директно посещение"
|
2490 |
},
|
2491 |
"Resolution": {
|
2492 |
"ColumnConfiguration": "Обобщена конфигурация",
|
2493 |
"ColumnResolution": "Разделителна способност на екрана",
|
2494 |
"Configurations": "Конфигурации",
|
|
|
2495 |
"Resolutions": "Разделителна способност",
|
2496 |
"WidgetGlobalVisitors": "Конфигурация на гло",
|
2497 |
"WidgetGlobalVisitorsDocumentation": "Този отчет показва повечето общопознати цялостни конфигурации, които вашите посетители са имали. Конфигурация е комбинацията от операционна система, тип на браузера и резолюция на екрана.",
|
2498 |
-
"WidgetResolutions": "Разделителна способност"
|
|
|
2499 |
},
|
2500 |
"SEO": {
|
2501 |
"PluginDescription": "Този плъгин извлича и показва SEO метрики: Alexa уеб ранк, Google Pagerank, брой индексирани страници и брой обратни връзки за избраната уеб страница.",
|
@@ -2508,8 +3837,9 @@
|
|
2508 |
"SEORankingsFor": "SEO ранг за %s"
|
2509 |
},
|
2510 |
"ScheduledReports": {
|
|
|
2511 |
"AggregateReportsFormat_GraphsOnly": "Покажете само графики (без докладни таблици)",
|
2512 |
-
"AggregateReportsFormat_TablesAndGraphs": "Покажете докладни таблици и графики за всички
|
2513 |
"AggregateReportsFormat_TablesOnly": "(по подразбиране) Покажи таблицата с отчетите (Графики само за ключови метрични данни)",
|
2514 |
"AlsoSendReportToTheseEmails": "Също така изпраща доклада до тези имейли (по един на ред):",
|
2515 |
"AreYouSureDeleteReport": "Сигурни ли сте че искате да изтриете този доклад и разписание?",
|
@@ -2523,102 +3853,225 @@
|
|
2523 |
"EmailReports": "Email доклади",
|
2524 |
"EmailSchedule": "Списък с е-пощи",
|
2525 |
"EvolutionGraph": "Показване на графиките с история за най-високите %s стойности",
|
|
|
|
|
2526 |
"FrontPage": "Заглавна страница",
|
2527 |
"MonthlyScheduleHelp": "Месечен график: докладът ще бъде изпратен на първия ден от всеки месец.",
|
2528 |
"MustBeLoggedIn": "Трябва да сте влязъл, за да създавате и планирате персонализирани отчети.",
|
2529 |
"NoRecipients": "Този доклад все още няма получатели",
|
|
|
|
|
2530 |
"Pagination": "Страница %1$s от %2$s",
|
|
|
2531 |
"PiwikReports": "Matomo доклади",
|
|
|
2532 |
"PleaseFindBelow": "Моля намерете по-долу вашият %1$s отчет за %2$s.",
|
|
|
2533 |
"ReportFormat": "Формат на доклад",
|
|
|
|
|
2534 |
"ReportIncludeNWebsites": "Този отчет ще включва главните метрични данни за всички уеб сайтове, които са били посещавани поне веднъж (от %s сайта, които са налични).",
|
|
|
|
|
|
|
2535 |
"ReportSent": "Отчетът е изпратен",
|
2536 |
-
"ReportsIncluded": "Включена статистика",
|
2537 |
"ReportType": "Изпрати доклад чрез",
|
|
|
2538 |
"ReportUpdated": "Отчетът е обновен",
|
|
|
2539 |
"SegmentAppliedToReports": "Сегментът '%s' се прилага към отчетите.",
|
|
|
|
|
|
|
2540 |
"SendReportNow": "Изпрати доклад сега",
|
2541 |
"SendReportTo": "Изпрати доклад до",
|
|
|
2542 |
"SentToMe": "Изпрати до мен",
|
|
|
2543 |
"TableOfContent": "Лист с отчети",
|
2544 |
"ThereIsNoReportToManage": "Няма отчет за сайт %s",
|
|
|
2545 |
"TopOfReport": "Върнете се в началото",
|
|
|
|
|
|
|
2546 |
"UpdateReport": "Обновете доклад",
|
2547 |
"WeeklyScheduleHelp": "Седмичен график: докладът ще бъде изпратен на първия понеделник на всяка седмица."
|
2548 |
},
|
2549 |
"SegmentEditor": {
|
2550 |
"AddANDorORCondition": "Добавяне на %s условие",
|
2551 |
"AddNewSegment": "Добави нов сегмент",
|
|
|
|
|
2552 |
"AreYouSureDeleteSegment": "Сигурни ли сте, че искате да изтриете този сегмент?",
|
2553 |
"AutoArchivePreProcessed": "Сегментираните отчети са предварително обработени (за по-голяма бързина се изисква archive.php cron)",
|
2554 |
"AutoArchiveRealTime": "Сегментираните отчети са обработени в реално време",
|
|
|
|
|
2555 |
"ChooseASegment": "Избери сегмент",
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2556 |
"DefaultAllVisits": "Всички посещения",
|
2557 |
-
"DragDropCondition": "Състояние „Плъзгане & Пускане“",
|
|
|
2558 |
"LoadingSegmentedDataMayTakeSomeTime": "Обработката на сегментирани данни за посетителите може да отнеме няколко минути…",
|
2559 |
"OperatorAND": "И",
|
2560 |
"OperatorOR": "ИЛИ",
|
|
|
2561 |
"SaveAndApply": "Запази & Приложи",
|
2562 |
"SegmentDisplayedAllWebsites": "всички сайтове",
|
2563 |
"SegmentDisplayedThisWebsiteOnly": "само този уебсайт",
|
|
|
2564 |
"SegmentNotApplied": "Сегмент '%s' не е приложен",
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2565 |
"ThisSegmentIsVisibleTo": "Този сегмент е видим за:",
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2566 |
"VisibleToAllUsers": "всички потребители",
|
2567 |
"VisibleToMe": "аз",
|
2568 |
-
"
|
2569 |
-
"
|
|
|
|
|
2570 |
},
|
2571 |
"SitesManager": {
|
|
|
2572 |
"AddSite": "Добави нов сайт",
|
2573 |
"AdvancedTimezoneSupportNotFound": "Разширена часова зона поддръжка не е намерена в PHP (поддържа в по-нова версия на PHP от 5.2 или точно 5.2). Все още можете да изберете ръчно UTC.",
|
2574 |
-
"AliasUrlHelp": "Препоръчително е, но не е задължително, да се уточнят различните URL адреси, по един на ред, че Вашите посетители имат достъп до този сайт. Наричани още URL адреси за сайта няма да се появяват в Референции
|
2575 |
"ChangingYourTimezoneWillOnlyAffectDataForward": "Промяната на часовата зона ще засегне само данни в бъдеще, и няма да се прилага със задна дата.",
|
|
|
2576 |
"Currency": "Валута",
|
2577 |
"CurrencySymbolWillBeUsedForGoals": "Символът за валутата ще бъде показан на следващите целеви доходи.",
|
|
|
2578 |
"DefaultCurrencyForNewWebsites": "Валута по подразбиране за нови уеб сайтове",
|
2579 |
"DefaultTimezoneForNewWebsites": "Времева зона по подразбиране за нови уеб сайтове",
|
2580 |
"DeleteConfirm": "Наистина ли желаете да изтриете този уеб сайт %s?",
|
|
|
|
|
2581 |
"DisableSiteSearch": "Изключване на следенето за търсенията в сайта",
|
2582 |
"EcommerceHelp": "Когато са включени, \"Цели\", отчета ще има нова секция Електронна търговия.",
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2583 |
"EnableEcommerce": "Електронна търговия включен",
|
|
|
2584 |
"ExceptionDeleteSite": "Не е възможно да изтриете този сайт, защото той е единствения регистриран в системата. Преди да изтриете този сайт е нужно да добавите нов сайт.",
|
2585 |
"ExceptionEmptyName": "Полето за име на сайт не може да бъде празно.",
|
2586 |
"ExceptionInvalidCurrency": "Валутата \"%1$s\" не е валидна. Моля, въведете валиден символ за валутата (например %2$s)",
|
2587 |
-
"ExceptionInvalidIPFormat": "IP адресът за изключване \"%1$s\" не е във валиден IP формат (например %2$s)",
|
2588 |
"ExceptionInvalidTimezone": "Времевата зона \"%s\" не е валидна. Моля, въведете валидна времева зона.",
|
2589 |
"ExceptionInvalidUrl": "Адреса '%s' не е валиден.",
|
2590 |
"ExceptionNoUrl": "Необходимо е да въведете поне един адрес (URL) за сайта.",
|
2591 |
"ExcludedIps": "Изключени IP адреси",
|
2592 |
"ExcludedParameters": "Изключени параметри",
|
|
|
|
|
|
|
|
|
|
|
|
|
2593 |
"GlobalListExcludedIps": "Глобален списък на изключените IP адреси",
|
2594 |
"GlobalListExcludedQueryParameters": "Глобален списък на заявените URL параметри да се изключи",
|
|
|
|
|
|
|
2595 |
"GlobalWebsitesSettings": "Глобални настройки на уеб сайтовете",
|
|
|
|
|
|
|
|
|
2596 |
"JsTrackingTagHelp": "JavaScript кода, който трябва да вмъкнете във всички страници",
|
|
|
|
|
2597 |
"KeepURLFragmentsHelp2": "Има възможност да отмените тази настройка за индивидуални уеб сайтове по-горе.",
|
|
|
2598 |
"ListOfIpsToBeExcludedOnAllWebsites": "IP адресите по-долу ще бъдат изключени от броячите на всички сайтове.",
|
2599 |
"ListOfQueryParametersToBeExcludedOnAllWebsites": "Заявка на URL адресните параметри по-долу, ще бъдат изключени от URL адресите на всички уеб сайтове.",
|
|
|
|
|
|
|
2600 |
"MainDescription": "За да работи брояча е необходимо да добавите САЙТОВЕ! Добавете, редактирайте, изтрийте Сайт и вземете кода за вмъкване.",
|
2601 |
"MenuManage": "Управление",
|
|
|
|
|
|
|
2602 |
"NotAnEcommerceSite": "Не сайт за Електронна търговия",
|
2603 |
"NotFound": "Не са намерени уеб сайтове",
|
2604 |
-
"
|
|
|
|
|
2605 |
"OnlyOneSiteAtTime": "Не можете да променяте едновременно два сайта. Моля Запазете или Откажете вашата текуща модификация на този уеб сайт %s.",
|
2606 |
"PiwikOffersEcommerceAnalytics": "Matomo позволява задълбочено проследяване и анализ на Електронна търговия. Научете повече относно %1$s Електронна търговия анализ %2$s.",
|
2607 |
"PiwikWillAutomaticallyExcludeCommonSessionParameters": "Matomo автоматично ще изключи общите параметри на сесията (%s).",
|
|
|
|
|
|
|
|
|
2608 |
"SearchKeywordLabel": "Параметър за заявката",
|
2609 |
"SearchKeywordParametersDesc": "Въведете списък, разделен със запетаи, за имената на всички заявки съдържащи търсени ключови думи в сайта.",
|
|
|
|
|
|
|
2610 |
"SelectACity": "Изберете град",
|
2611 |
"SelectDefaultCurrency": "Можете да изберете валута, за да зададете по подразбиране за нови уеб сайтове.",
|
2612 |
"SelectDefaultTimezone": "Можете да изберете времева зона, за да изберете по подразбиране за нови уеб сайтове.",
|
2613 |
"ShowTrackingTag": "покажи кода за вмъкване",
|
2614 |
-
"Sites": "Сайтове",
|
2615 |
"SiteSearchUse": "Можете да използвате Matomo да следи и докладва това, което посетителите търсят, посредством търсачката на сайта.",
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2616 |
"SuperUserAccessCan": "Потребител с права „привилигирован потребител“ може да достъпва също %1$sзадаване на глобални настройки%2$s за новите сайтове.",
|
2617 |
"Timezone": "Часова зона",
|
|
|
2618 |
"TrackingTags": "Проследяване на етикети за %s",
|
2619 |
-
"Urls": "Адреси",
|
2620 |
"Type": "Тип",
|
2621 |
"UTCTimeIs": "UTC часът е %s.",
|
|
|
|
|
|
|
2622 |
"WebsitesManagement": "Управление на сайтове",
|
2623 |
"XManagement": "Управление на %s",
|
2624 |
"YouCurrentlyHaveAccessToNWebsites": "В момента имате достъп до %s уебсайта.",
|
@@ -2656,66 +4109,195 @@
|
|
2656 |
"Version": "Версия"
|
2657 |
},
|
2658 |
"Tour": {
|
2659 |
-
"
|
|
|
|
|
|
|
|
|
|
|
2660 |
"BrowseMarketplace": "Разгледайте магазина",
|
2661 |
-
"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2662 |
},
|
2663 |
"Transitions": {
|
|
|
|
|
2664 |
"BouncesInline": "%s еднократни посещения",
|
2665 |
"DirectEntries": "Директни посещения",
|
2666 |
"ErrorBack": "Върнете се на предишната страница",
|
2667 |
"ExitsInline": "%s изходи",
|
|
|
2668 |
"FromCampaigns": "От кампании",
|
2669 |
"FromPreviousPages": "От вътрешни страници",
|
2670 |
"FromPreviousPagesInline": "%s от вътреши страници",
|
2671 |
"FromPreviousSiteSearches": "От вътрешни търсения",
|
2672 |
"FromPreviousSiteSearchesInline": "%s от вътрешни търсения",
|
2673 |
"FromSearchEngines": "От търсещи машини",
|
|
|
2674 |
"FromWebsites": "От уебсайтове",
|
2675 |
"IncomingTraffic": "Входящ трафик",
|
2676 |
"LoopsInline": "%s страница се презарежда",
|
2677 |
"NoDataForAction": "Няма информация за %s",
|
|
|
|
|
|
|
|
|
2678 |
"OutgoingTraffic": "Изходящ трафик",
|
|
|
|
|
|
|
|
|
2679 |
"ShareOfAllPageviews": "Тази страница има %1$s разглеждания (от всички %2$s разглеждания)",
|
2680 |
"ToFollowingPages": "Към вътрешни страници",
|
2681 |
"ToFollowingPagesInline": "%s за вътрешни страници",
|
2682 |
"ToFollowingSiteSearches": "Външни търсения",
|
2683 |
"ToFollowingSiteSearchesInline": "%s вътрешни търсения",
|
|
|
|
|
|
|
|
|
2684 |
"XOfAllPageviews": "%s на всички показания за тази страница",
|
2685 |
-
"XOutOfYVisits": "%1$s (от %2$s)"
|
2686 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2687 |
},
|
2688 |
"UserCountry": {
|
2689 |
"CannotLocalizeLocalIP": "IP адрес %s е вътрешен (частен) адрес и не може да бъде определено местоположението му.",
|
2690 |
"City": "Град",
|
2691 |
"CityAndCountry": "%1$s, %2$s",
|
2692 |
"Continent": "Континент",
|
|
|
2693 |
"Country": "Държава",
|
2694 |
-
"
|
2695 |
-
"country_a2": "Сателитен доставчик",
|
2696 |
-
"country_cat": "Каталонски-говорящите общности",
|
2697 |
-
"country_o1": "Друга държава",
|
2698 |
"CurrentLocationIntro": "Според текущия доставчик, вашето местоположение е",
|
2699 |
"DefaultLocationProviderDesc1": "Доставчикът по подразбиране, определящ местоположението, отгатва държавата, от която е посетителят, на базата на използвания език.",
|
|
|
2700 |
"DefaultLocationProviderExplanation": "Използва се доставчикът по подразбиране, което означава, че Matomo ще определя местоположението на посетителите спрямо езика, който те използват. %1$sПрочетете това%2$s, за да научите как се настройва по-точен метод за определяне на местоположението.",
|
|
|
2701 |
"DistinctCountries": "%s отделни държави",
|
2702 |
"FromDifferentCities": "различни градове",
|
|
|
|
|
2703 |
"Geolocation": "Геолокация",
|
2704 |
"GeolocationPageDesc": "В тази страница може да се промени начинът, по който Matomo определя местоположението на посетителите.",
|
2705 |
-
"
|
2706 |
-
"
|
2707 |
-
"
|
2708 |
-
"getRegionDocumentation": "Този отчет показва къде са се намирали вашите посетители, при достъпването на сайта.",
|
2709 |
"Latitude": "Географска ширина",
|
|
|
2710 |
"Location": "Място",
|
2711 |
"LocationProvider": "Местоположение на доставчика",
|
|
|
2712 |
"Longitude": "Географска дължина",
|
|
|
|
|
2713 |
"NoDataForGeoIPReport1": "Няма данни за този доклад, защото или няма информация за местоположението, или IP адресът на посетителя не може да бъде определен къде се намира.",
|
2714 |
"NoDataForGeoIPReport2": "За да бъде активирано по-точно определяне на местоположението е нужно да се променят настройките %1$sтук%2$s и да се използва %3$sбази данни на ниво град%4$s.",
|
|
|
|
|
2715 |
"Region": "Регион",
|
2716 |
"SubmenuLocations": "Местонахождение",
|
|
|
2717 |
"ToGeolocateOldVisits": "За да получите информация за предишни посещения, използвайте скриптът описан %1$sтук%2$s.",
|
2718 |
-
"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2719 |
},
|
2720 |
"UserCountryMap": {
|
2721 |
"AndNOthers": "и %s други",
|
@@ -2726,109 +4308,315 @@
|
|
2726 |
"HoursAgo": "преди %s часа",
|
2727 |
"MinutesAgo": "преди %s минути",
|
2728 |
"NoVisit": "Няма посещения",
|
|
|
|
|
2729 |
"None": "Няма",
|
|
|
2730 |
"RealTimeMap": "Карта на посетителите в реално време",
|
|
|
2731 |
"Regions": "Региони",
|
2732 |
"Searches": "%s търсения",
|
2733 |
"SecondsAgo": "преди %s секунди",
|
2734 |
"ShowingVisits": "Последни посещения базирани на географско местоположение",
|
2735 |
-
"Unlocated": "<b>%1$s<\/b> %2$
|
2736 |
"VisitorMap": "Карта на посетителите",
|
|
|
|
|
2737 |
"WorldWide": "По целия свят",
|
2738 |
"map": "карта"
|
2739 |
},
|
2740 |
"UserId": {
|
2741 |
-
"
|
|
|
|
|
|
|
|
|
|
|
2742 |
},
|
2743 |
"UserLanguage": {
|
2744 |
"BrowserLanguage": "Език на браузъра",
|
2745 |
-
"LanguageCode": "Код на езика"
|
|
|
|
|
|
|
2746 |
},
|
2747 |
"UsersManager": {
|
|
|
|
|
|
|
|
|
2748 |
"AddUser": "Добави нов потребител",
|
|
|
|
|
2749 |
"AllWebsites": "Всички сайтове",
|
|
|
|
|
|
|
2750 |
"AnonymousUserHasViewAccess": "Забележка: потребител %1$s има %2$s достъп до този сайт.",
|
2751 |
"AnonymousUserHasViewAccess2": "Аналитичните доклади и информацията за посетителите, са публично видими.",
|
|
|
2752 |
"ApplyToAllWebsites": "Запомни за всички сайтове",
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2753 |
"ClickHereToDeleteTheCookie": "Натиснете тук, за да изтриете бисквитката и Matomo да отчита Вашите посещения",
|
2754 |
"ClickHereToSetTheCookieOnDomain": "Натиснете тук, за да зададете бисквитка, която ще Ви гарантира, че Вашите посещения няма да се отчитат от Matomo в %s",
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2755 |
"DeleteConfirm": "Наистина ли искате да изтриете потребителя %s?",
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2756 |
"Email": "Имейл",
|
|
|
|
|
|
|
2757 |
"EmailYourAdministrator": "%1$sПишете на администратора Ви за този проблем%2$s.",
|
|
|
|
|
|
|
|
|
2758 |
"ExceptionDeleteDoesNotExist": "Потребителя '%s' не съществува, по тази причина не може да бъде изтрит.",
|
2759 |
"ExceptionDeleteOnlyUserWithSuperUserAccess": "Изтриването на потребител '%s' не е възможно.",
|
2760 |
"ExceptionEditAnonymous": "Анонимният потребител не може да бъде редактиран или изтрит. Matomo по този начин дефинира в система потребители, които не са влезли. Например можете да направите данните на брояча ви публични, като зададете 'преглед' права на 'анонимен' потребител.",
|
2761 |
"ExceptionEmailExists": "Потребител с имейл '%s' вече съществува.",
|
|
|
2762 |
"ExceptionInvalidEmail": "Е-пощата, който сте въвели не е валиден.",
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2763 |
"ExceptionPasswordMD5HashExpected": "UsersManager.getTokenAuth очаква MD5-хеширана парола (32 символа дълъг низ). Моля, извикайте md5() функцията на паролата преди да извикате този метод.",
|
2764 |
"ExceptionRemoveSuperUserAccessOnlySuperUser": "Премахването на права на привилигирован потребител за потребител '%s' не е възможно.",
|
|
|
2765 |
"ExceptionUserDoesNotExist": "Потребителя '%s' не съществува.",
|
|
|
|
|
2766 |
"ExceptionYouMustGrantSuperUserAccessFirst": "Трябва да съществува поне един привилигирован потребител. Моля, дайде нужните права на друг потребител.",
|
2767 |
"ExcludeVisitsViaCookie": "Изключете Вашите посещения с помощта на бисквитка",
|
|
|
|
|
|
|
|
|
|
|
|
|
2768 |
"ForAnonymousUsersReportDateToLoadByDefault": "За анонимни потребители, дата доклад да се зареди по подразбиране",
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2769 |
"InjectedHostCannotChangePwd": "В момента вие посещавате страница от неизвестен хост(%1$s). Не можете да смените паролата, преди да отстраните този проблем.",
|
2770 |
"LastSeen": "Последно видяно",
|
|
|
|
|
2771 |
"ManageAccess": "Управление на правата",
|
|
|
|
|
|
|
2772 |
"MenuAnonymousUserSettings": "Настройки на анонимните потребители",
|
2773 |
-
"
|
2774 |
"MenuUserSettings": "Потребителски настройки",
|
2775 |
-
"
|
|
|
|
|
|
|
|
|
|
|
|
|
2776 |
"NoUsersExist": "Не са налични потребители, все още.",
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2777 |
"PrivAdmin": "Админ",
|
|
|
2778 |
"PrivNone": "Без права",
|
2779 |
"PrivView": "Преглед",
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2780 |
"ReportDateToLoadByDefault": "Отчет от дата да се зареди по подразбиране",
|
2781 |
"ReportToLoadByDefault": "Доклад за зареждане по подразбиране",
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2782 |
"SuperUserAccessManagement": "Управление на достъпа на привилигированите потребители",
|
2783 |
"SuperUserAccessManagementGrantMore": "Тук могат да се предоставят права „привилигирован потребител“ на потребителите. Тази функция трябва да се използва внимателно.",
|
2784 |
-
"SuperUserAccessManagementMainDescription": "
|
|
|
|
|
|
|
|
|
|
|
2785 |
"TheLoginScreen": "В екрана за вход",
|
2786 |
"ThereAreCurrentlyNRegisteredUsers": "Има %s регистрирани потребители.",
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2787 |
"TypeYourPasswordAgain": "Вашата нова парола отново.",
|
2788 |
"User": "Потребител",
|
|
|
|
|
|
|
|
|
2789 |
"UsersManagement": "Управление на потребители",
|
2790 |
"UsersManagementMainDescription": "Създайте нови потребители или управлявайте вече съществуващи. Също така и можете да задавате правата за достъп.",
|
|
|
|
|
|
|
2791 |
"YourUsernameCannotBeChanged": "Потребителското име не може да се променя.",
|
2792 |
"YourVisitsAreIgnoredOnDomain": "%1$sВашите посещения са игнорирани от Matomo в %2$s %3$s (Matomo игнорира бисквитката, намерена във Вашият браузър).",
|
2793 |
-
"YourVisitsAreNotIgnored": "%1$sВашите посещения не се игнорират от Matomo %2$s(Бисквитката за игнориране на Вашите посещения, не е открита във Вашият браузър)."
|
2794 |
-
"ManageUsers": "Управление на потребители",
|
2795 |
-
"ShowAll": "Покажи всички",
|
2796 |
-
"Username": "Потребител"
|
2797 |
},
|
2798 |
"VisitFrequency": {
|
|
|
2799 |
"ColumnActionsByReturningVisits": "Действия от Върнали се посетители",
|
|
|
2800 |
"ColumnAverageVisitDurationForReturningVisitors": "Средно времетраене на посещението на върналите се посетители (в секунди)",
|
|
|
2801 |
"ColumnAvgActionsPerReturningVisit": "Средно действия на завърналия се посетител",
|
2802 |
-
"ColumnBounceCountForReturningVisits": "Брой повторни
|
|
|
2803 |
"ColumnBounceRateForReturningVisits": "Bounce rate за върнали се посетители",
|
2804 |
-
"ColumnMaxActionsInReturningVisit": "Максимум действия при едно повторно
|
2805 |
"ColumnNbReturningVisitsConverted": "Брой конвертирани повторни посещения",
|
|
|
|
|
|
|
2806 |
"ColumnReturningVisits": "Върнали се посетители",
|
2807 |
"ColumnSumVisitLengthReturning": "Време прекарано по време на повторните посещения (в секунди)",
|
2808 |
"ColumnUniqueNewVisitors": "Уникални нови посетители",
|
2809 |
"ColumnUniqueReturningVisitors": "Уникални повторни посетители",
|
|
|
|
|
|
|
|
|
2810 |
"NewVisits": "нови посещения",
|
|
|
|
|
|
|
|
|
|
|
|
|
2811 |
"ReturningVisitDocumentation": "Повторно посещение (за разлиса от ново посещение) се прави от някой, който е посещавал сайта поне веднъж в миналото.",
|
2812 |
"ReturningVisitsDocumentation": "Това е преглед на повторните посещения.",
|
2813 |
-
"ReturnVisits": "завърнали се посетители",
|
2814 |
"SubmenuFrequency": "Честота",
|
|
|
2815 |
"WidgetGraphReturning": "Графика на завърналите се посетители",
|
2816 |
"WidgetOverview": "Резюме на честотата"
|
2817 |
},
|
2818 |
"VisitTime": {
|
|
|
|
|
2819 |
"ColumnLocalTime": "Локално време (на посетителя)",
|
|
|
|
|
2820 |
"ColumnServerTime": "Сървърно време (на сървъра)",
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2821 |
"DayOfWeek": "Ден от седмицата",
|
2822 |
"LocalTime": "Посещения по локално време",
|
2823 |
"NHour": "%sч",
|
|
|
2824 |
"ServerTime": "Посещения по сървърно време",
|
|
|
2825 |
"SubmenuTimes": "Време",
|
|
|
2826 |
"VisitsByDayOfWeek": "Посещения по ден от седмицата",
|
2827 |
"WidgetByDayOfWeekDocumentation": "Графиката показва посещенията за всеки ден от седмицата.",
|
2828 |
"WidgetLocalTime": "Посещения по локално време",
|
2829 |
"WidgetLocalTimeDocumentation": "Тази графика показва колко е бил часът в %1$s часовия пояс на потребителите %2$s по време на посещенията им.",
|
2830 |
"WidgetServerTime": "Посещения по сървърно време",
|
2831 |
-
"WidgetServerTimeDocumentation": "Тази графика показва колко е бил часът в %1$s часовия пояс използван от сървъра %2$s по време на посещенията."
|
|
|
2832 |
},
|
2833 |
"VisitorInterest": {
|
2834 |
"BetweenXYMinutes": "%1$s-%2$s мин",
|
@@ -2853,25 +4641,43 @@
|
|
2853 |
"WidgetVisitsByNumDocumentation": "В този отчет можете да видите броя посещения, които са били N-тото посещение, тоест посетителите, които са посетили вашият уеб сайт поне N пъти."
|
2854 |
},
|
2855 |
"VisitsSummary": {
|
|
|
|
|
2856 |
"GenerateQueries": "%s заявки са изпълнени",
|
2857 |
"GenerateTime": "%s секунди за генериране на страницата",
|
|
|
2858 |
"NbActionsDescription": "%s действия (показвания, изтегляния и outlinks)",
|
|
|
|
|
2859 |
"NbKeywordsDescription": "уникални ключови думи",
|
2860 |
-
"
|
|
|
|
|
|
|
|
|
|
|
2861 |
"NbUniqueVisitors": "уникални посетители",
|
|
|
|
|
2862 |
"NbVisitsDescription": "посещения",
|
|
|
2863 |
"VisitsSummary": "Резюме на посещенията",
|
2864 |
"VisitsSummaryDocumentation": "Това е преглед на еволюцията на посещенията.",
|
2865 |
-
"
|
|
|
2866 |
"WidgetOverviewGraph": "Резюме с графика",
|
2867 |
"WidgetVisits": "Резюме на посещенията"
|
2868 |
},
|
2869 |
"WebsiteMeasurable": {
|
2870 |
"Website": "Сайт",
|
|
|
2871 |
"Websites": "Сайтове"
|
2872 |
},
|
2873 |
"Widgetize": {
|
2874 |
"OpenInNewWindow": "Отвори в нов прозорец",
|
2875 |
-
"
|
|
|
|
|
|
|
2876 |
}
|
2877 |
}
|
16 |
"Apply": "Приложи",
|
17 |
"ArchivingInlineHelp": "За сайтовете със среден или висок трафик, препоръчваме да изключите Matomo архивиране след гледане от браузър. Съветваме ви в този случай да използвате cron job за Вашите доклади на всеки час.",
|
18 |
"ArchivingTriggerDescription": "За по-големи Matomo инсталации, се препоръчва %1$scron job%2$s за автоматични доклади.",
|
19 |
+
"ArchivingTriggerSegment": "Използването на Персонализирани сегменти ще активира обработката на архиви.",
|
20 |
"AuthenticationMethodSmtp": "Удостоверен метод за SMTP",
|
21 |
"AverageOrderValue": "Средна стойност на поръчка",
|
22 |
"AveragePrice": "Средна цена",
|
36 |
"Clear": "Изчисти",
|
37 |
"ClickHere": "Кликнете тук за повече информация.",
|
38 |
"ClickToRemoveComp": "Кликнете за да изтриете това сравнение.",
|
39 |
+
"ClickToSearch": "Кликнете, за да търсите",
|
40 |
"Close": "Затваряне",
|
41 |
"ColumnActionsPerVisit": "Действия при посещение",
|
42 |
"ColumnActionsPerVisitDocumentation": "Среден брой на действията (показвания на страници, изтегляния или отваряне на външни връзки), извършени по време на посещенията.",
|
60 |
"ColumnExits": "Изходи",
|
61 |
"ColumnExitsDocumentation": "Брой посещения, които са свършили на тази страница.",
|
62 |
"ColumnGenerationTime": "Време за генериране",
|
63 |
+
"ColumnHits": "Кликвания",
|
64 |
"ColumnKeyword": "Ключови думи",
|
65 |
"ColumnLabel": "Етикет",
|
66 |
"ColumnMaxActions": "Максимум действия при едно посещение",
|
69 |
"ColumnNbUniqVisitors": "Уникални посетители",
|
70 |
"ColumnNbUniqVisitorsDocumentation": "Броят на уникалните посетители, отварящи вашия уебсайт. Всеки потребител се брои само веднъж, дори ако посещава уебсайта няколко пъти на ден.",
|
71 |
"ColumnNbUsers": "Потребители",
|
72 |
+
"ColumnNbUsersDocumentation": "Броят на потребителите, влезли във Вашия уебсайт. Това е броят на уникалните активни потребители, които имат зададено Потребителско ID (чрез функцията за проследяващ код 'setUserId').",
|
73 |
"ColumnNbVisits": "Посещения",
|
74 |
"ColumnNbVisitsDocumentation": "Ако посетителят отвори вашият сайт за първи път или поне 30 мин. след последното си посещение, то това ще се брои като ново посещение.",
|
75 |
"ColumnPageBounceRateDocumentation": "Процент посещения, които започват от тази страница и са последвани от незабавно напускане на сайта.",
|
87 |
"ColumnUniquePageviewsDocumentation": "Брой посещения, включващи тази страница. Ако страницата е видяна няколко пъти по време на посещението, се отчита като едно посещение.",
|
88 |
"ColumnValuePerVisit": "Стойност на посещението",
|
89 |
"ColumnViewedAfterSearch": "Избран от резултатите при търсене",
|
90 |
+
"ColumnViewedAfterSearchDocumentation": "Броят пъти, в който тази страница е била посетена, след като посетител е извършил търсене във Вашия сайт и е кликнал върху връзка от списъка с резултати.",
|
91 |
"ColumnViewsWithGenerationTime": "Прегледи на страницата с времето за генериране",
|
92 |
"ColumnVisitDuration": "Продължителност на посещение (в секунди)",
|
93 |
"ColumnVisitsWithConversions": "Посещения с Конверсия",
|
94 |
+
"CompareDatesParamMustMatchComparePeriods": "Дължината на параметъра на заявката %1$s трябва да съвпада с дължината на параметъра на заявката %2$s.",
|
95 |
"CompareTo": "Сравнено с:",
|
96 |
+
"ComparisonCardTooltip1": "'%1$s' на %2$s съдържа %3$s от всички посещения (%4$s от %5$s общо).",
|
97 |
+
"ComparisonCardTooltip2": "Броят на посещенията е различен с %1$s в сравнение с %2$s над %3$s.",
|
98 |
+
"ComparisonRatioTooltip": "Това е %1$s промяна в сравнение с '%2$s' сегмента на %3$s.",
|
99 |
+
"Comparisons": "Сравнения",
|
100 |
+
"ComputedMetricAverage": "Средно %1$s за %2$s",
|
101 |
+
"ComputedMetricAverageDocumentation": "Средна стойност на \"%1$s\" за \"%2$s\".",
|
102 |
"ComputedMetricAverageShortDocumentation": "Средна стойност от \"%1$s\".",
|
103 |
+
"ComputedMetricCountDocumentation": "Брой %s",
|
104 |
+
"ComputedMetricCountWithValue": "Записи с %s",
|
105 |
+
"ComputedMetricCountWithValueDocumentation": "Броят на записите, за които е зададена стойност за %s",
|
106 |
+
"ComputedMetricMax": "Максимално %s",
|
107 |
+
"ComputedMetricMaxDocumentation": "Максималната стойност за %s",
|
108 |
+
"ComputedMetricMin": "Минимално %s",
|
109 |
+
"ComputedMetricMinDocumentation": "Минималната стойност за %s",
|
110 |
+
"ComputedMetricRate": "%s темп",
|
111 |
+
"ComputedMetricRateDocumentation": "Пропорцията на %1$s от всички %2$s.",
|
112 |
+
"ComputedMetricRateShortDocumentation": "Процент от %1$s.",
|
113 |
+
"ComputedMetricSum": "Общо %s",
|
114 |
+
"ComputedMetricSumDocumentation": "Общ брой (сума) от %s",
|
115 |
+
"ComputedMetricUniqueCount": "Уникални %s",
|
116 |
+
"ComputedMetricUniqueCountDocumentation": "Уникалният брой на %s",
|
117 |
"ConfigFileIsNotWritable": "Конфигурационният файл %1$s на Matomo не е достъпен и Вашите настройки няма да бъдат запазени. %2$s Моля променете правата на файла, така, че да може да се пише в него.",
|
118 |
+
"Confirm": "Потвърди",
|
119 |
"Continue": "Продължи",
|
120 |
"ContinueToPiwik": "Продължете към Matomo",
|
121 |
"Copy": "Копиране",
|
122 |
+
"Create": "Създайте",
|
123 |
+
"CreatedByUser": "създадено от %s",
|
124 |
+
"CreationDate": "Дата на създаване",
|
125 |
"CurrentMonth": "Този месец",
|
126 |
"CurrentWeek": "Тази седмица",
|
127 |
"CurrentYear": "Тази година",
|
128 |
+
"CurrentlyUsingUnsecureHttp": "В момента използвате Matomo по несигурна HTTP връзка. Това може да направи Вашата Matomo инсталация уязвима към атаки. Възможно е също така да нарушавате законите за защита на личните данни, тъй като някои функции, включително бисквитките за отказ, няма да работят. Препоръчваме ви да настроите Matomo да използва SSL (HTTPS) за по-добра сигурност.",
|
129 |
+
"Custom": "Персонализирано",
|
130 |
"Daily": "Ежедневно",
|
131 |
"DailyReport": "дневно",
|
132 |
"DailyReports": "Дневни доклади",
|
138 |
"DateRange": "Период от време:",
|
139 |
"DateRangeFrom": "От",
|
140 |
"DateRangeFromTo": "От %1$s до %2$s",
|
141 |
+
"DateRangeInPeriodList": "период от време",
|
142 |
"DateRangeTo": "До",
|
143 |
"DaysHours": "%1$s дни %2$s часа",
|
144 |
"DaysSinceFirstVisit": "Дни след първото посещение",
|
150 |
"Description": "Описание",
|
151 |
"Desktop": "Десктоп",
|
152 |
"Details": "Детайли",
|
153 |
+
"Disabled": "Изключено",
|
154 |
"Discount": "Отстъпка",
|
155 |
"DisplaySimpleTable": "Покажи проста таблица",
|
156 |
"DisplayTableWithGoalMetrics": "Покажи таблица с повече целеви показатели",
|
158 |
"Documentation": "Документация",
|
159 |
"Donate": "Дарение",
|
160 |
"Done": "Готово",
|
161 |
+
"DoubleClickToChangePeriod": "Кликнете два пъти, за да активирате избрания период.",
|
162 |
+
"Download": "Изтегляне",
|
163 |
"DownloadFail_FileExists": "Файлът %s вече съществува!",
|
164 |
"DownloadFail_FileExistsContinue": "Направен е опит да се продължи свалянето за %s, но изцяло изтеглен файл вече съществува!",
|
165 |
"DownloadFail_HttpRequestFail": "Файлът не може да бъде свален! Възможно е да има проблем със сайта, от който се опитвате да сваляте. Може да се опитате по-късно отново да свалите файла или да го намерите от друго място.",
|
172 |
"Edit": "Редактирай",
|
173 |
"EncryptedSmtpTransport": "Въведете криптирания транспортен слой, който се изисква от Вашия SMTP сървър.",
|
174 |
"Error": "Грешка",
|
175 |
+
"ErrorRequest": "Упс... при заявката е възникнал проблем. Може би сървърът е имал временен проблем или сте поискали отчет с твърде много данни. Моля, опитайте отново. Ако тази грешка се повтаря, моля %1$sсвържете се с администратор на Matomo%2$s за съдействие.",
|
176 |
+
"ErrorRequestFaqLink": "Вижте стъпките за разрешаване на този проблем в раздела с често задавани въпроси.",
|
177 |
+
"ErrorTryAgain": "Грешка. Моля, опитайте отново по-късно.",
|
178 |
+
"Errors": "Грешки",
|
179 |
"EvolutionOverPeriod": "Развитие за периода",
|
180 |
"EvolutionSummaryGeneric": "%1$s в %2$s сравнено с %3$s в %4$s. Нарастване: %5$s",
|
181 |
+
"ExceptionCapabilityAccessWebsite": "Нямате достъп до този ресурс, тъй като той изисква %1$s възможност за идентификатора на уеб сайта = %2$d.",
|
182 |
"ExceptionCheckUserHasSuperUserAccessOrIsTheUser": "Потребителят трябва да бъде или привилигирован потребител или потребител '%s'.",
|
183 |
+
"ExceptionConfigurationFileExistsButNotReadable": "Изглежда, че конфигурационният файл %s съществува, но Matomo не може да го прочете.",
|
184 |
"ExceptionConfigurationFileNotFound": "Конфигурационния файл {%s} не бе намерен.",
|
185 |
+
"ExceptionConfigurationFilePleaseCheckReadableByUser": "Моля, проверете дали %1$s може да се чете от потребителя '%2$s'.",
|
186 |
+
"ExceptionContactSupportGeneric": "Ако все още имате този проблем, моля %1$sсвържете се с Matomo администратор%2$s за помощ.",
|
187 |
+
"ExceptionDatabaseAccess": "Достъпът до базата данни е отказан",
|
188 |
+
"ExceptionDatabaseUnavailable": "MySQL сървърът е изчезнал",
|
189 |
"ExceptionDatabaseVersion": "Вашата %1$s версия е %2$s ,но Matomo изисква най-малко %3$s.",
|
190 |
+
"ExceptionDatabaseVersionNewerThanCodebase": "Вашата кодова база на Matomo работи със старата версия %1$s, а открихме, че Вашата база данни на Matomo вече е обновена до по-новата версия %2$s.",
|
191 |
"ExceptionDatabaseVersionNewerThanCodebaseWait": "Може би администраторите на Вашата Matomo инсталация приключват с обновлението на софтуера. Моля опитайте след няколко минути.",
|
192 |
"ExceptionDirectoryToDelete": "Папка за изтриване: %s",
|
193 |
"ExceptionFileIntegrity": "Цялостната проверка неуспешна: %s",
|
194 |
+
"ExceptionFileToDelete": "Файл за изтриване: %s",
|
195 |
"ExceptionFilesizeMismatch": "Размерът на файла не съответства: %1$s (очаквана дължина: %2$s, намерен: %3$s)",
|
196 |
"ExceptionIncompatibleClientServerVersions": "Вашата %1$s клиентска версия е %2$s ,която е несъвместима с версията на сървъра %3$s.",
|
197 |
"ExceptionInvalidAggregateReportsFormat": "Формат на обобщените доклади '%1$s' не е валиден. Опитайте някое от следните вместо това: %2$s.",
|
198 |
"ExceptionInvalidArchiveTimeToLive": "Днес времето за живот на архива трябва да бъде число в секунди по-голямо от нула",
|
199 |
+
"ExceptionInvalidDateBeforeFirstWebsite": "Датата '%1$s' е дата от преди момента, в който първият сайт е бил онлайн. Опитайте дата, която'е след %2$s (времева марка %3$s).",
|
200 |
"ExceptionInvalidDateFormat": "Формата на датата трябва да е: %1$s или ключова дума, поддържана от %2$s функция (виж %3$s за повече информация)",
|
201 |
"ExceptionInvalidDateRange": "Датата '%1$s' не е правилен период от време. Тя трябва да има следния формат: %2$s.",
|
202 |
"ExceptionInvalidPeriod": "Периодът '%1$s' не се поддържа. Опитайте някоя от следните вместо това: %2$s",
|
208 |
"ExceptionMethodNotFound": "Методът '%1$s' не съществува или не е наличен в модулът '%2$s'.",
|
209 |
"ExceptionMissingFile": "Липсващ файл: %s",
|
210 |
"ExceptionNonceMismatch": "Не може да се провери кода за сигурност на тази форма.",
|
211 |
+
"ExceptionNotSupportedBrowserText": "Поради проблеми със сигурността браузърът ви не се поддържа. Моля, преминете към по-нова версия.",
|
212 |
+
"ExceptionNotSupportedBrowserTitle": "Вашият браузър не се поддържа.",
|
213 |
"ExceptionPrivilege": "Нямате достъп до този ресурс, тъй като изисква %s достъп.",
|
214 |
+
"ExceptionPrivilegeAccessWebsite": "Нямате достъп до този ресурс, тъй като той изисква %1$s достъп за идентификатора на уебсайта = %2$d.",
|
215 |
+
"ExceptionPrivilegeAtLeastOneWebsite": "Нямате достъп до този ресурс, тъй като той изисква %s достъп за поне един уебсайт.",
|
216 |
+
"ExceptionReportNotEnabled": "Исканият отчет не е активиран. Това обикновено означава, че или плъгинът, който дефинира отчета, е деактивиран, или нямате разрешение за достъп до този отчет.",
|
217 |
"ExceptionReportNotFound": "Заявения отчет не съществува.",
|
218 |
"ExceptionUnableToStartSession": "Невъзможно е да се стартира сесия.",
|
219 |
"ExceptionUndeletableFile": "Не мога да изтрия %s",
|
220 |
+
"ExceptionUnexpectedDirectory": "Във вашия Matomo бяха намерени директории, които системата не очаква да съществуват.",
|
221 |
+
"ExceptionUnexpectedDirectoryPleaseDelete": "Моля, изтрийте тези директории, за да предотвратите грешки.",
|
222 |
+
"ExceptionUnexpectedFile": "Във вашия Matomo бяха намерени файлове, които системата не очаква да съществуват.",
|
223 |
+
"ExceptionUnexpectedFilePleaseDelete": "Моля, изтрийте тези файлове, за да предотвратите грешки.",
|
224 |
"ExceptionUnreadableFileDisabledMethod": "Конфигурационния файл {%1$s} не може да бъде прочетен. Вашият хостинг може да е забранил %2$s.",
|
225 |
+
"ExceptionWidgetNotEnabled": "Исканият уиджет не е активиран. Това обикновено означава, че или плъгинът, който дефинира отчета, е деактивиран, или нямате разрешение за достъп до този отчет.",
|
226 |
"ExceptionWidgetNotFound": "Заявената от вас джаджа не съществува.",
|
227 |
"ExpandDataTableFooter": "Промяна на визуализацията или конфигуриране на доклада",
|
228 |
"Export": "Запазване",
|
229 |
"ExportAsImage": "Запазване като изображение",
|
230 |
"ExportThisReport": "Запази в други формати",
|
231 |
"Faq": "Често задавани въпроси",
|
232 |
+
"FileIntegrityWarning": "Проверката на целостта на файловете се провали и отчете някои грешки. Трябва да отстраните този проблем и след това да опресните тази страница, докато не покаже резултат без грешки.",
|
233 |
+
"FileIntegrityWarningReupload": "Грешките по-долу може да се дължат на частично или неуспешно качване на файлове Matomo.",
|
234 |
"FileIntegrityWarningReuploadBis": "Опитайте се да качите отново файловете на Matomo в двоичен режим.",
|
235 |
"First": "Първи",
|
236 |
"Flatten": "Изравнено",
|
237 |
"ForExampleShort": "например",
|
238 |
+
"ForceSSLRecommended": "Препоръчваме да използвате Matomo само през защитени SSL връзки. За да предотвратите несигурен достъп през HTTP, добавете %1$s към секцията %2$s във Вашия файл Matomo config\/config.ini.php.",
|
239 |
+
"ForcedSSL": "Задължителна SSL връзка",
|
240 |
"Forums": "Форуми",
|
241 |
"FromReferrer": "от",
|
242 |
"GeneralInformation": "Обща информация",
|
243 |
"GeneralSettings": "Основни настройки",
|
244 |
+
"Generic": "Общо",
|
245 |
"GetStarted": "Как да започнем",
|
246 |
"GiveUsYourFeedback": "Напишете ни отзив!",
|
247 |
"GoTo": "Към %s",
|
248 |
+
"GoTo2": "Отидете на",
|
249 |
"Goal": "Цел",
|
250 |
"GraphHelp": "Повече информация за показаните графики в Matomo.",
|
251 |
"HelloUser": "Здравей, %s!",
|
252 |
"Help": "Помощ",
|
253 |
+
"HelpReport": "Кликнете, за да се покаже помощна информация за този отчет",
|
254 |
+
"HelpResources": "Помощни ресурси",
|
255 |
"HelpTranslatePiwik": "Може би желаете да ни %1$sпомогнете с подобряването на превода на Matomo%2$s?",
|
256 |
"Hide": "скриване",
|
257 |
"HoursMinutes": "%1$s часа %2$s мин.",
|
258 |
"IP": "IP адрес",
|
259 |
"Id": "ИД",
|
260 |
+
"IfArchivingIsFastYouCanSetupCronRunMoreOften": "Ако приемете, че архивирането е бързо за Вашата конфигурация, можете да настроите crontab да се изпълнява по-често.",
|
261 |
+
"IncompletePeriod": "Непълен период",
|
262 |
"InfoFor": "Информация за %s",
|
263 |
"Installed": "Инсталирано",
|
264 |
"InvalidDateRange": "Невалиден период от време. Моля, опитайте отново.",
|
265 |
"InvalidResponse": "Получените данни е невалидни.",
|
266 |
"JsTrackingTag": "JavaScript код",
|
267 |
+
"KpiMetric": "Показател за KPI",
|
268 |
"Language": "Език",
|
269 |
+
"Languages": "Езици",
|
270 |
"LastDays": "Последните %s дни (с днес)",
|
271 |
"LastDaysShort": "Последните %s дни",
|
272 |
"LearnMore": "%1$sнаучете повече%2$s",
|
279 |
"Logout": "Изход",
|
280 |
"MainMetrics": "Главни метрики",
|
281 |
"Matches": "Съвпадения",
|
282 |
+
"MatomoIsACollaborativeProjectYouCanContributeAndDonateNextRelease": "%1$sMatomo%2$s, известен преди като Piwik, е съвместен проект, предоставен ви от членовете на %7$sMatomo%8$s, както и от много други сътрудници по целия свят. <br> Ако сте фен на Matomo, можете да помогнете: разберете %3$sКак да участвате в Matomo%4$s или %5$sдарете сега%6$s, за да помогнете за финансирането на следващото страхотно издание на Matomo!",
|
283 |
+
"MaximumNumberOfPeriodsComparedIs": "Максималният брой периоди, които могат да бъдат сравнявани едновременно, е %s.",
|
284 |
+
"MaximumNumberOfSegmentsComparedIs": "Максималният брой сегменти, които могат да бъдат сравнявани едновременно, е %s.",
|
285 |
"Measurable": "Измерим",
|
286 |
+
"MeasurableId": "Измерим ID",
|
287 |
"Measurables": "Измерими",
|
288 |
"MediumToHighTrafficItIsRecommendedTo": "За среден до висок трафик на сайтове, ние препоръчваме да обработвате докладите за днес на всеки половин час (%1$s секунди) или всеки час (%2$s секунди).",
|
289 |
"Metadata": "Мета данни",
|
304 |
"NUsers": "%s потребители",
|
305 |
"NVisits": "%s посещения",
|
306 |
"Name": "Име",
|
307 |
+
"NameShownInTheSenderColumn": "Името, показано в колоната на подателя",
|
308 |
"NbActions": "Брой действията",
|
309 |
+
"NbInteractions": "Брой взаимодействия",
|
310 |
"NbSearches": "Брой вътрешни търсения",
|
311 |
+
"NeedMoreHelp": "Имате нужда от повече помощ?",
|
312 |
"Never": "Никога",
|
313 |
+
"New": "Ново",
|
314 |
"NewReportsWillBeProcessedByCron": "Когато Matomo архивирането не е предизвикано от браузърът, новите доклади ще бъдат обработени от crontab.",
|
315 |
"NewUpdatePiwikX": "Нова версия: Matomo %s",
|
316 |
"NewVisitor": "Нов посетител",
|
321 |
"NoDataForTagCloud": "Няма данни за този таг облак.",
|
322 |
"NotDefined": "%s недефинирани",
|
323 |
"NotInstalled": "Не е иснталиран",
|
324 |
+
"NotPossibleWithoutHttps": "Внимание: Ако направите това без да сте настроили SSL сертификат за използване на HTTPS, ще счупите Matomo.",
|
325 |
"NotRecommended": "не е препоръчително",
|
326 |
"NotValid": "%s не е валиден",
|
327 |
"Note": "Бележка",
|
337 |
"OperationAtMost": "Най-много",
|
338 |
"OperationContains": "Съдържа",
|
339 |
"OperationDoesNotContain": "Не съдържа",
|
340 |
+
"OperationEndsWith": "Завършва с",
|
341 |
"OperationEquals": "Еквивалентно",
|
342 |
"OperationGreaterThan": "Повече от",
|
343 |
"OperationIs": "е",
|
344 |
"OperationIsNot": "Не е",
|
345 |
"OperationLessThan": "По-малко от",
|
346 |
"OperationNotEquals": "Еквивалентно на",
|
347 |
+
"OperationStartsWith": "Започва с",
|
348 |
"OptionalSmtpPort": "Не е задължително. По подразбиране е 25 за некриптиран и TLS SMTP, и 465 за SSL SMTP.",
|
349 |
"Options": "Настройки",
|
350 |
+
"Or": "или",
|
351 |
"OrCancel": "или %1$s Затвори %2$s",
|
352 |
"Others": "Други",
|
353 |
"Outlink": "Външна връзка",
|
354 |
"Outlinks": "Изходящи",
|
355 |
"OverlayRowActionTooltip": "Вижте анализите директно от сайта си (отваря нов подпрозорец)",
|
356 |
+
"OverlayRowActionTooltipTitle": "Отворете наслагване на страница",
|
357 |
"Overview": "Общ преглед",
|
358 |
"Pages": "Страници",
|
359 |
+
"Pagination": "%1$s-%2$s от %3$s",
|
360 |
+
"PaginationWithoutTotal": "%1$s-%2$s",
|
361 |
"ParameterMustIntegerBetween": "Параметърът %1$s трябва да има цифрова стойност от %2$s до %3$s.",
|
362 |
"Password": "Парола",
|
363 |
"Period": "Период",
|
364 |
"Piechart": "Диаграма",
|
365 |
+
"PiwikCannotBeUpgradedBecausePhpIsTooOld": "Matomo не може да бъде надграден до най-новата версия, защото версията на PHP е твърде стара.",
|
366 |
"PiwikXIsAvailablePleaseNotifyPiwikAdmin": "%1$s е наличен. Моля, уведомете %2$sMatomo администратор%3$s.",
|
367 |
"PiwikXIsAvailablePleaseUpdateNow": "Matomo %1$s е наличен. %2$s Обновете сега. %3$s (вижте %4$s промените%5$s).",
|
368 |
+
"PleaseContactYourPiwikAdministrator": "Моля, свържете се с администратор на Matomo.",
|
369 |
"PleaseSpecifyValue": "Моля, въведете стойност за '%s'.",
|
370 |
+
"PleaseTryAgain": "Моля, опитайте отново",
|
371 |
"PleaseUpdatePiwik": "Моля, актуализирайте своя Matomo",
|
372 |
+
"PleaseUpgradeYourPhpVersionSoYourPiwikDataStaysSecure": "Моля, актуализирайте версията на PHP поне до PHP %s, за да бъдат данните Ви в Matomo сигурни.",
|
373 |
+
"Plugin": "Плъгин",
|
374 |
+
"Plugins": "Плъгини",
|
375 |
"PoweredBy": "Разработка на",
|
376 |
"Previous": "Назад",
|
377 |
"PreviousDays": "Предишните %s дни (без днес)",
|
378 |
"PreviousDaysShort": "Предходните %s дни",
|
379 |
+
"PreviousPeriod": "Предишен период",
|
380 |
+
"PreviousYear": "Предишна година",
|
381 |
"Price": "Цена",
|
382 |
+
"Print": "Печат",
|
383 |
"ProductConversionRate": "Степен на конверсия на продукта",
|
384 |
"ProductRevenue": "Приходи от продукта",
|
385 |
+
"Profiles": "Профили",
|
386 |
"PurchasedProducts": "Купени продукти",
|
387 |
"Quantity": "Количество",
|
388 |
"RangeReports": "Зададен от вас период",
|
389 |
"ReadThisToLearnMore": "%1$sПрочетете това, за да научите повече.%2$s",
|
390 |
"RealTime": "В реално време",
|
391 |
+
"RearchiveTimeIntervalOnlyForTodayReports": "Това засяга само отчетите за днешния ден (или друг диапазон от дати, включително днешния ден)",
|
392 |
+
"Reasons": "Причини",
|
393 |
"Recommended": "Препоръчително",
|
394 |
"RecordsToPlot": "Записи за",
|
395 |
"Refresh": "Обновяване",
|
399 |
"Remove": "Премахни",
|
400 |
"Report": "Доклад",
|
401 |
"ReportGeneratedFrom": "Този доклад е генериран с данни от %s.",
|
402 |
+
"ReportRatioTooltip": "'%1$s' представлява %2$s от %3$s %4$s в сегмента %5$s с %6$s.",
|
403 |
"Reports": "Доклади",
|
404 |
"ReportsContainingTodayWillBeProcessedAtMostEvery": "Архивирай отчетите на всеки X секунди",
|
405 |
"ReportsWillBeProcessedAtMostEveryHour": "Докладите ще бъдат най-добре обработени на всеки час.",
|
406 |
"RequestTimedOut": "Данните, искани до %s изтече. Моля опитайте отново.",
|
407 |
"Required": "%s е необходимо",
|
408 |
+
"Required2": "Задължително",
|
409 |
"ReturningVisitor": "Завърнал се посетител",
|
410 |
"ReturningVisitorAllVisits": "Преглед на всички посещения",
|
411 |
"RowEvolutionRowActionTooltip": "Преглед на показателите, за този ред, по какъв начин са се променили през времето",
|
412 |
+
"RowEvolutionRowActionTooltipTitle": "Еволюция на отворения ред",
|
413 |
"Rows": "Редове",
|
414 |
"RowsToDisplay": "Редове за показване",
|
415 |
"Save": "Запиши",
|
416 |
"SaveImageOnYourComputer": "За да запазите изображението на вашия компютър, натиснете с десен бутон на изображението и изберете \"Save Image As...\"",
|
417 |
"Search": "Търсене",
|
418 |
"SearchNoResults": "Няма резултати",
|
419 |
+
"SecondsSinceFirstVisit": "Секунди от първото посещение",
|
420 |
+
"SecondsSinceLastEcommerceOrder": "Секунди от последната поръчка в Ecommerce",
|
421 |
+
"SecondsSinceLastVisit": "Секунди от последното посещение",
|
422 |
"Security": "Сигурност",
|
423 |
"SeeAll": "вижте всички",
|
424 |
"SeeTheOfficialDocumentationForMoreInformation": "Прегледайте %1$sофициалната документация%2$s за повече информация.",
|
431 |
"SingleWebsitesDashboard": "Табло за единична страница",
|
432 |
"SmallTrafficYouCanLeaveDefault": "За сайтове с малък трафик, може да оставите по подразбиране %s секунди, както и достъп до всички доклади в реално време.",
|
433 |
"SmtpEncryption": "SMTP криптиране",
|
434 |
+
"SmtpFromAddress": "SMTP от адрес",
|
435 |
+
"SmtpFromEmailHelp": "Стойността по подразбиране е noreply@{DOMAIN}, където {DOMAIN} ще бъде заменен с Вашия домейн Matomo \"%1$s\".<br>Ако изпращането на имейли не работи за Вас, може да се наложи да зададете този адрес да съответства на Вашето SMTP потребителско име.",
|
436 |
+
"SmtpFromName": "SMTP от име",
|
437 |
"SmtpPassword": "SMTP парола",
|
438 |
"SmtpPort": "SMTP порт",
|
439 |
"SmtpServerAddress": "SMTP сървър адрес",
|
445 |
"Table": "Таблица",
|
446 |
"TagCloud": "Етикети",
|
447 |
"Tax": "Данък",
|
448 |
+
"ThankYouForUsingMatomo": "Благодарим Ви, че използвате Matomo",
|
449 |
+
"TheMatomoTeam": "Екипът на Matomo",
|
450 |
"TimeAgo": "%s преди",
|
451 |
"TimeFormat": "Формат за часа",
|
452 |
"TimeOnPage": "Време на страница",
|
453 |
+
"ToDeleteAllDirectoriesRunThisCommand": "За да изтриете всички тези директории наведнъж, можете да изпълните тази команда:",
|
454 |
+
"ToDeleteAllFilesRunThisCommand": "За да изтриете всички тези файлове наведнъж, можете да изпълните тази команда:",
|
455 |
"Total": "Общо",
|
456 |
+
"TotalRatioTooltip": "Това е %1$s от всички %2$s %3$s в %4$s.",
|
457 |
"TotalRevenue": "Общо приход",
|
458 |
"TotalVisitsPageviewsActionsRevenue": "(Всичко: %1$s посещения, %2$s прегледи, %3$s действия, %4$s приход)",
|
459 |
+
"Totals": "Общо",
|
460 |
"TrackingScopeAction": "Действие",
|
461 |
+
"TrackingScopePage": "Страница",
|
462 |
"TrackingScopeVisit": "Посещение",
|
463 |
"TransitionsRowActionTooltip": "Вижте какво посетителите са правили преди и след посещаването на тази страница",
|
464 |
+
"TransitionsRowActionTooltipTitle": "Отворени преходи",
|
465 |
"TranslatorName": "Kristalin Chavdarov, Андон Иванов, Tom Atanasov, Dimitar Stamenov, Панайотис Кондоянис",
|
466 |
"UniquePurchases": "Уникални поръчки",
|
467 |
"Unknown": "Неизвестен",
|
468 |
+
"Update": "Актуализация",
|
469 |
"Upload": "Качи",
|
470 |
"UsePlusMinusIconsDocumentation": "Използвайте знаците плюс и минус за навигация.",
|
471 |
"UseSMTPServerForEmail": "Използвай SMTP сървър за имейл",
|
472 |
+
"UseSSLInstall": "Препоръчваме да използвате Matomo само през защитени SSL връзки. Моля, %1$s кликнете тук, за да продължете процеса на инсталиране през SSL %2$s.",
|
473 |
"UserId": "Потребителски идентификационен номер",
|
474 |
+
"UserIds": "Потребителски идентификатори",
|
475 |
"Username": "Потребител",
|
476 |
"VBarGraph": "Графика",
|
477 |
+
"ValidatorErrorCharacterTooLong": "Стойността съдържа символи \"%1$s\", но трябва да съдържа най-много %2$s знака.",
|
478 |
+
"ValidatorErrorCharacterTooShort": "Стойността съдържа символи \"%1$s\", но трябва да съдържа поне %2$s знака.",
|
479 |
+
"ValidatorErrorEmptyValue": "Трябва да се предостави стойност.",
|
480 |
+
"ValidatorErrorInvalidDateTimeFormat": "Датата \"%1$s\" няма правилния формат, моля, използвайте %2$s",
|
481 |
+
"ValidatorErrorNoValidRegex": "Стойността \"%s\" не е валиден регулярен израз (Regexp).",
|
482 |
+
"ValidatorErrorNotANumber": "Стойността не е число.",
|
483 |
+
"ValidatorErrorNotEmailLike": "Стойността \"%s\" не изглежда като валиден имейл.",
|
484 |
+
"ValidatorErrorNotUrlLike": "Стойността \"%s\" не изглежда като URL адрес.",
|
485 |
+
"ValidatorErrorNumberTooHigh": "Стойността \"%1$s\" е твърде висока. Стойността трябва да е най-много %2$s",
|
486 |
+
"ValidatorErrorNumberTooLow": "Стойността \"%1$s\" е твърде ниска. Стойността трябва да е поне %2$s.",
|
487 |
+
"ValidatorErrorXNotWhitelisted": "Стойността \"%1$s\" не е разрешена, използвайте една от следните стойности: %2$s.",
|
488 |
"Value": "Стойност",
|
489 |
"View": "Преглед",
|
490 |
+
"ViewAccessRequired": "Използваният token_auth има твърде висока степен на достъп, за да бъде използван в URL на заявка без API. Моля, използвайте парола за конкретно приложение за потребител, който има достъп само за преглед.",
|
491 |
"ViewDocumentationFor": "Преглед на документацията за %1$s",
|
492 |
"Visit": "Посещение",
|
493 |
"VisitConvertedGoal": "Посещението се превръща в най-малко една цел",
|
494 |
"VisitConvertedGoalId": "Посещение, което се счита като Id на специална цел",
|
495 |
"VisitConvertedNGoals": "Посещението преобразува %s цели",
|
496 |
"VisitDuration": "Средно времетраене на посещението (в секунди)",
|
497 |
+
"VisitId": "ID на посещение",
|
498 |
+
"VisitType": "Тип посещение",
|
499 |
"VisitTypeExample": "Например, ако изберете всички посетители, които са се завърнали на сайта, включително тези, които са купили нещо при предишните посещения, API заявката ще съдържа %s",
|
500 |
+
"VisitTypes": "Видове посещения",
|
501 |
"Visitor": "Посетител",
|
502 |
+
"VisitorFingerprint": "Отпечатък",
|
503 |
"VisitorID": "ID на посетител",
|
504 |
"VisitorIP": "IP на посетител",
|
505 |
+
"VisitorIPs": "IP адреси на посетители",
|
506 |
"VisitorSettings": "Настройки на посетителя",
|
507 |
"Visitors": "Посетители",
|
508 |
"VisitsWith": "Посещения с %s",
|
509 |
+
"VisualizationDoesNotSupportComparison": "Тази визуализация не поддържа сравнение на сегмент\/период.",
|
510 |
"Warning": "Предупреждение",
|
511 |
+
"WarningDebugOnDemandEnabled": "Режимът Tracker %1$s е активиран. От съображения за сигурност това трябва да бъде активирано само за кратък период от време. За да го деактивирате, задайте %2$s на %3$s в %4$s",
|
512 |
+
"WarningDevelopmentModeOnButNotGitInstalled": "В момента използвате Matomo в режим на разработка, но Matomo не е инсталирано чрез git. Не се препоръчва използването на Matomo в режим на разработка в производствена среда.",
|
513 |
"WarningFileIntegrityNoManifest": "Цялостната проверка на файла не може да бъде изпълнена поради липсата на manifest.inc.php.",
|
514 |
"WarningFileIntegrityNoManifestDeployingFromGit": "В случай, че Matomo се внедрява посредством Git, е нормално това съобщение да се появява.",
|
515 |
"WarningFileIntegrityNoMd5file": "Цялостната проверка не може да бъде осъществена поради липсата на md5_file() функцията.",
|
516 |
"WarningPasswordStored": "%1$sВнимание:%2$s Тази парола ще се съхранява в конфигурационния файл видими за всички, които я ползват.",
|
517 |
+
"WarningPhpVersionXIsTooOld": "Версията на PHP %s, която използвате, достигна своя край на живота (EOL). Силно препоръчваме да обновите до текуща версия, тъй като използването на тази версия може да Ви изложи на уязвимости и проблеми в сигурността, които са били отстранени в по-новите версии на PHP.",
|
518 |
+
"WarningPiwikWillStopSupportingPHPVersion": "Matomo ще спре да поддържа PHP %1$s в следващата версия. Актуализирайте своя PHP поне до PHP %2$s, преди да е станало твърде късно!",
|
519 |
+
"Warnings": "Предупреждения",
|
520 |
"Website": "Уебсайт",
|
521 |
"Weekly": "Ежеседмично",
|
522 |
"WeeklyReport": "седмично",
|
523 |
"WeeklyReports": "Седмични доклади",
|
524 |
"WellDone": "Браво!",
|
525 |
+
"Widget": "Уиджет",
|
526 |
"Widgets": "Джаджи",
|
527 |
"XComparedToY": "%1$s сравнено с %2$s",
|
528 |
"XFromY": "%1$s от %2$s",
|
531 |
"YearsDays": "%1$s години %2$s дни",
|
532 |
"Yes": "Да",
|
533 |
"YouAreCurrentlyUsing": "Вие използвате Matomo %s.",
|
534 |
+
"YouAreViewingDemoMessage": "Преглеждате демо версията на %1$sMatomo%2$s",
|
535 |
"YouMustBeLoggedIn": "Трябва да сте влязъл, за да имате достъп до тази функционалност.",
|
536 |
+
"YouMustUpgradePhpVersionToReceiveLatestPiwik": "Трябва да обновите версията си на PHP, за да получите най-новата актуализация на Matomo.",
|
537 |
+
"YourChangesHaveBeenSaved": "Промените бяха запазени.",
|
538 |
+
"YourSessionHasExpired": "Сесията Ви е изтекла поради липса на активност. Моля, влезте, за да продължите."
|
539 |
},
|
540 |
"Mobile": {
|
541 |
"AboutPiwikMobile": "За Matomo Mobile",
|
557 |
"EmailUs": "Пишете ни",
|
558 |
"EnableGraphsLabel": "Покажи графики",
|
559 |
"EnterAuthCode": "Въведете код за удостоверяване",
|
560 |
+
"EnterAuthCodeExplanation": "Изглежда, че може би използвате двуфакторно автентикиране. Моля, въведете шестцифрения код, за да влезете в акаунта си.",
|
561 |
"EnterCorrectAuthCode": "Въведете правилния код за удостоверяване",
|
562 |
"EvolutionGraph": "Графика показваща историята",
|
563 |
+
"ExceptionNoViewAccess": "Моля, проверете Вашето потребителско име и парола и се уверете, че имате %s достъп за поне един уебсайт.",
|
564 |
"HelpUsToImprovePiwikMobile": "Желаете ли да активирате анонимното проследяване в Matomo Mobile?",
|
565 |
"HowtoDeleteAnAccount": "Натиснете продължително, за да изтриете профил.",
|
566 |
"HowtoDeleteAnAccountOniOS": "Плъзнете от ляво на дясно за да изтриете акаунта",
|
567 |
+
"HowtoExitAndroid": "Моля, кликнете отново НАЗАД, за да излезете",
|
568 |
"HowtoLoginAnonymous": "Оставете потребителско име и парола празно за анонимен вход",
|
569 |
+
"HttpIsNotSecureWarning": "Вашият Matomo оторизиращ токен (token_auth) се изпраща в явен текст ако използвате 'HTTP'. Поради тази причина препоръчваме HTTPS за защитен транспорт на данни през интернет. Искате ли да продължите?",
|
570 |
"HttpTimeout": "HTTP сесията изтече",
|
571 |
"IgnoreSslError": "Игнориране на SSL грешка",
|
572 |
"IncompatiblePiwikVersion": "Matomo версията, която използвате не е съвместима с Matomo Mobile 2. Обновете вашата инсталация на Matomo и пробвайте отново или инсталирайте Matomo Mobile 1.",
|
575 |
"LoginCredentials": "Потребителски данни за вписване",
|
576 |
"LoginToPiwikToChangeSettings": "Впишете се във вашия Matomo сървър, за да създавате и обновявате сайтове, потребители или да променяте основни настройки като „Доклад за зареждане по подразбиране“.",
|
577 |
"LoginUseHttps": "Използване на HTTPS",
|
578 |
+
"MatomoMarketplace": "Пазар на Матомо",
|
579 |
"MatomoMobile": "Matomo мобилно приложение",
|
580 |
"MultiChartLabel": "Покажи sparklines",
|
581 |
"NavigationBack": "Назад",
|
582 |
"NetworkError": "Мрежова грешка",
|
583 |
+
"NetworkErrorWithStatusCode": "Възникна грешка „%1$s“. Заявката върна състоянието \"%2$s\". URL адресът беше „%3$s“. Моля, проверете въведения URL адрес и логовете за грешки на този сървър за повече информация относно грешката и как да я разрешите.",
|
584 |
"NetworkErrorWithStatusCodeShort": "Мрежова грешка %s",
|
585 |
"NetworkNotReachable": "Мрежата не постижима",
|
586 |
"NoAccountIsSelected": "Трябва да изберете профил. Добавете нов, ако не сте създали до момента такъв.",
|
592 |
"NoWebsiteFound": "Няма открит уебсайт",
|
593 |
"NoWebsitesShort": "Без сайтове",
|
594 |
"PossibleSslError": "Възможна грешка със SSL сертификата",
|
595 |
+
"PossibleSslErrorExplanation": "Възникна грешка, която може да бъде причинена от невалиден или самоподписан сертификат: „%s“. Входът може да работи за Вас ако изключите валидирането на SSL, но е по-малко сигурен. Можете да промените валидирането на SSL по всяко време в настройките.",
|
596 |
"PullDownToRefresh": "Дръпнете надолу за да опресните...",
|
597 |
"RatingDontRemindMe": "Не ми напомняй",
|
598 |
"RatingNotNow": "Не сега",
|
618 |
},
|
619 |
"RowEvolution": {
|
620 |
"AvailableMetrics": "Налични метрики",
|
621 |
+
"CompareDocumentation": "Кликнете върху връзката по-долу и отворете този изскачащ прозорец за друг ред от същата таблица, за да сравните множество записи.<br>Използвайте Shift-кликване, за да маркирате реда за сравнение, без да отваряте този изскачащ прозорец.",
|
622 |
"CompareRows": "Сравняване на записи",
|
623 |
"ComparingRecords": "Сравнявайки %s редове",
|
624 |
+
"Documentation": "Кликнете върху показателите, за да ги покажете в голямата графика на еволюцията. Използвайте Shift и кликване, за да покажете няколко показатели наведнъж.",
|
625 |
"MetricBetweenText": "между %1$s и %2$s",
|
626 |
"MetricChangeText": "%s промени през периода",
|
627 |
"MetricMinMax": "%1$s варират между %2$s и %3$s за периода",
|
631 |
"PickAnotherRow": "Изберете друг ред за сравнение"
|
632 |
},
|
633 |
"API": {
|
634 |
+
"ChangeTokenHint": "Ако искате да промените този токен, моля, отидете на Вашата страница %1$s с лични настройки %2$s.",
|
635 |
+
"EvolutionMetricName": "%s еволюция",
|
636 |
+
"GenerateVisits": "Ако нямате данни за днес, можете да генерирате някои с помощта на плъгина %1$s, като отидете на „Разработка → Генератор на посетители“ в административната част на Matomo.",
|
637 |
+
"Glossary": "Речник",
|
638 |
"KeepTokenSecret": "Това token_auth е тайна, като Вашето потребителско име и парола, %1$s не го споделяйте%2$s!",
|
639 |
+
"LearnAboutCommonlyUsedTerms2": "Научете за често използвани термини, за да се възползвате максимално от анализа на Matomo.",
|
640 |
+
"LoadedAPIs": "Заредени %s API",
|
641 |
+
"MainMetricsReportDocumentation": "Този отчет дава общ преглед на най-важните показатели във всички категории и плъгини.",
|
642 |
+
"MoreInformation": "Повече информация за API на Matomo, достъпна във %1$sВъведение в Matomo API%2$s и %3$sMatomo API Reference%4$s.",
|
643 |
+
"PluginDescription": "Всички данни в Matomo са достъпни чрез прости API. Този плъгин е входната точка на уеб услугата, която можете да извикате, за да получите Вашите данни за уеб анализ в XML, JSON, PHP, CSV и т.н.",
|
644 |
+
"ReportingApiReference": "Справка за API за отчитане",
|
645 |
+
"TopLinkTooltip": "Осъществявайте програмен достъп до Вашите данни от уеб анализ чрез прост API в JSON, XML и т.н.",
|
646 |
+
"UserAuthentication": "Удостоверяване на потребителя",
|
647 |
+
"UsingTokenAuth": "Ако искате да %1$s данни в рамките на скрипт, crontab и т.н..%2$s, трябва да добавите URL параметъра '%3$s' към извикванията на API за URL адреси, които изискват удостоверяване."
|
648 |
},
|
649 |
"Actions": {
|
650 |
+
"ActionType": "Тип действие",
|
651 |
+
"ActionTypes": "Видове действия",
|
652 |
+
"ActionsInVisit": "Действия при посещение",
|
653 |
"AvgGenerationTimeTooltip": "Средно базирано на %1$s посещение(я) %2$s между %3$s и %4$s",
|
654 |
+
"Behaviour": "Поведение",
|
655 |
+
"ColumnActionURL": "URL адрес на действие",
|
656 |
+
"ColumnClickedURL": "Кликната препратка",
|
657 |
+
"ColumnClickedURLs": "Кликнати препратки",
|
658 |
+
"ColumnClicks": "Кликвания",
|
659 |
+
"ColumnClicksDocumentation": "Брой кликвания на тази връзка.",
|
660 |
"ColumnDownloadURL": "Свален URL",
|
661 |
+
"ColumnDownloadURLs": "URL адреси за изтегляне",
|
662 |
"ColumnEntryPageTitle": "Входно заглавие",
|
663 |
"ColumnEntryPageURL": "Входна страница",
|
664 |
+
"ColumnEntryPageURLs": "URL адреси на входни страници",
|
665 |
"ColumnExitPageTitle": "Изходно заглавие",
|
666 |
"ColumnExitPageURL": "Изходна страница",
|
667 |
+
"ColumnExitPageURLs": "URL адреси на изходни страници",
|
668 |
+
"ColumnIdPageview": "ID на преглед на страница",
|
669 |
+
"ColumnInteractionPosition": "Позиция на взаимодействие",
|
670 |
"ColumnNoResultKeyword": "Ключова дума без резултати в търсенето",
|
671 |
"ColumnPageName": "Име на страницата",
|
672 |
+
"ColumnPageURL": "Страница URL",
|
673 |
+
"ColumnPageViewPosition": "Позиция на прегледа на страницата",
|
674 |
"ColumnPagesPerSearch": "Страници с резултати от търсене",
|
675 |
"ColumnPagesPerSearchDocumentation": "Посетителите ще търсят във вашия сайт, а понякога избират „Напред“, за да видят повече резултати. Това е средният брой на страниците с резултати от търсенето, видян за тази ключова дума.",
|
|
|
676 |
"ColumnSearchCategory": "Търсена категория",
|
677 |
+
"ColumnSearchExits": "%% Изходи за търсене",
|
|
|
678 |
"ColumnSearchExitsDocumentation": "Процент посещения, след които, потребителите са напуснали сайта, при търсене за тази ключова дума.",
|
679 |
"ColumnSearchResultsCount": "Брой резултати от търсенето",
|
680 |
+
"ColumnSearches": "Търсачки",
|
681 |
+
"ColumnSearchesDocumentation": "Брой посещения търсениза тази ключова дума от системата за търсене на твоя сайт.",
|
682 |
"ColumnSiteSearchKeywords": "Уникални ключови думи",
|
683 |
"ColumnUniqueClicks": "Уникални кликове",
|
684 |
"ColumnUniqueClicksDocumentation": "Броят на посещенията които са кликнали на тази връзка. Ако на тази връзка е било кликано няколко пъти, при едно посещение, отчита се само веднъж.",
|
685 |
+
"ColumnUniqueDownloads": "Уникални изтегляния",
|
686 |
"ColumnUniqueOutlinks": "Уникални изходящи",
|
687 |
+
"DownloadsReportDocumentation": "В този отчет можете да видите файловете, които Вашите посетители са изтеглили. %s Matomo отчита броя кликвания върху връзката за сваляне. Дали изтеглянето е завършено или не, не е ясно за Matomo.",
|
688 |
+
"DownloadsSubcategoryHelp1": "В този отчет можете да видите кои файлове са изтеглили посетителите Ви.",
|
689 |
+
"DownloadsSubcategoryHelp2": "Това, което Matomo брои за изтегляне, е кликването върху връзка за изтегляне. Дали изтеглянето е завършено или не, не е известно на Matomo.",
|
690 |
"EntryPageTitles": "Входни заглавия",
|
691 |
"EntryPageTitlesReportDocumentation": "Този отчет съдържа информация за заглавията на входните страници, които са били използвани през определен период.",
|
692 |
+
"EntryPagesReportDocumentation": "Този отчет съдържа информация за входните страници, които са били използвани през посочения период. Входната страница е първата страница, която потребителят преглежда по време на посещението си. %s Входните URL адреси се показват като структура от папки.",
|
693 |
+
"EntryPagesSubcategoryHelp1": "Този отчет съдържа информация за входните страници, които са били използвани през посочения период. Входната страница е първата страница, която потребителят преглежда по време на посещението си.",
|
694 |
+
"EntryPagesSubcategoryHelp2": "Входните URL адреси се показват като структура от папки.",
|
695 |
"ExitPageTitles": "Изходни заглавия",
|
696 |
"ExitPageTitlesReportDocumentation": "Този отчет съдържа информация за заглавията на изходните страници, които са били използвани през определен период.",
|
697 |
+
"ExitPagesReportDocumentation": "Този отчет съдържа информация за изходните страници, възникнали през посочения период. Изходната страница е последната страница, която потребителят преглежда по време на посещението си. %s Изходните URL адреси се показват като структура от папки.",
|
698 |
+
"ExitPagesSubcategoryHelp1": "Този отчет съдържа информация за изходните страници, възникнали през посочения период. Изходната страница е последната страница, която потребителят преглежда по време на посещението си.",
|
699 |
+
"ExitPagesSubcategoryHelp2": "Изходните URL адреси се показват като структура от папки.",
|
700 |
+
"MainMetricsReportDocumentation": "Този отчет предоставя много основен преглед на това какви действия предприемат посетителите на уебсайта Ви.",
|
701 |
"OneSearch": "1 търсене",
|
702 |
"OutlinkDocumentation": "Изходящата връзка е връзка, която води посетителя извън Вашия сайт (към друг домейн).",
|
703 |
"OutlinksReportDocumentation": "Този доклад показва йерархичен списък на изходящите адреси, които са избрани от посетителите.",
|
704 |
+
"OutlinksSubcategoryHelp1": "Този отчет показва йерархичен списък с URL адреси за препращане, върху които са кликнали посетителите Ви. Препратка (outlink) е връзка, която отвежда посетителя извън Вашия уебсайт (към друг домейн).",
|
705 |
"PageTitlesReportDocumentation": "Този доклад включва информация за заглавията на посетена страница. %1$s Заглавието на страницата е HTML %2$s таг, който се изобразява в заглавната част на повечето браузери.",
|
706 |
+
"PageTitlesSubcategoryHelp1": "Този отчет съдържа информация за заглавията на посетените страници.",
|
707 |
+
"PageTitlesSubcategoryHelp2": "Заглавието на страницата е HTML &lt;title&gt; таг, който повечето браузъри показват в заглавието на прозореца си.",
|
708 |
"PageUrls": "URLs страница",
|
709 |
+
"PageViewsByVisitor": "Колко пъти тази страница е била прегледана от този посетител за всички посещения",
|
710 |
+
"PagesReportDocumentation": "Този доклад включва информация за посетените връзки. %s Таблицата е организирана йерархично, връзките са показани като структура от папки.",
|
711 |
+
"PagesSubcategoryHelp1": "Този отчет съдържа информация за URL адресите на страниците, които са били посетени.",
|
712 |
+
"PagesSubcategoryHelp2": "Таблицата е организирана йерархично, URL адресите се показват като структура от папки.",
|
713 |
+
"PagesSubcategoryHelp3": "Използвайте знаците плюс и минус за навигация.",
|
714 |
+
"PluginDescription": "Отчети за показванията на страниците и заглавията на страниците. Позволява Ви да измерите търсачката на Вашия вътрешен уебсайт. Автоматично проследява кликванията върху външни връзки и изтегляния на файлове.",
|
715 |
+
"RevisitedPages": "Страници, преглеждани повече от веднъж",
|
716 |
+
"SiteSearchCategories": "Категории (търсене в сайта)",
|
717 |
"SiteSearchCategories1": "Този доклад показва списък с категориите, които посетителите са избрали при търсене във Вашия сайт.",
|
718 |
"SiteSearchCategories2": "Например, електронните магазини обикновено имат категоризатор, така че посетителите да могат да филтрират търсенията си за всички продукти по категория.",
|
719 |
+
"SiteSearchCategory": "Категория (търсене в сайта)",
|
720 |
"SiteSearchFollowingPagesDoc": "Когато посетителите разглеждат Вашия сайт, те търсят определена страница, продукт или услуга. Този доклад показва списъка със страници, които са били посетени предимно след използване на търсачката на сайта. С други думи, това е списъкът с най-посещаваните страници, които са били търсени от посетителите намиращи се във Вашия сайт.",
|
721 |
"SiteSearchIntro": "Проследявайки търсенията, които посетителите правят на вашия сайт, е един много ефективен начин да научите повече за това, което вашата аудитория търси. Това може да помогне за намиране на идеи за ново съдържание, нови продукти и търговия, които потенциалните клиенти могат да търсят, и като цяло да подобри впечатлението на потребителя от вашия сайт.",
|
722 |
"SiteSearchKeyword": "Ключова дума (Търсене на сайта)",
|
723 |
+
"SiteSearchKeywordCount": "Брой ключови думи (търсене в сайта)",
|
724 |
+
"SiteSearchKeywordCounts": "Брой ключови думи (търсене в сайта)",
|
725 |
+
"SiteSearchKeywords": "Ключови думи (търсене в сайта)",
|
726 |
"SiteSearchKeywordsDocumentation": "Този отчет описва ключовите думи, които посетителите търсят през търсачката на сайта.",
|
727 |
"SiteSearchKeywordsNoResultDocumentation": "Този отчет съдържа „Търсене по ключови думи“, в който няма резултати от търсенето: може би алгоритъмът на търсачката може да се подобри, или може би вашите посетители търсят съдържание, което (все още) не е на вашия сайт?",
|
728 |
+
"SiteSearchSubcategoryHelp1": "Секцията за търсене в сайта показва кои ключови думи използват посетителите, когато търсят във Вашия уебсайт. Той също така показва кои страници преглеждат потребителите след извършване на търсене и кои ключови думи за търсене на място не връщат никакви резултати.",
|
729 |
+
"SiteSearchSubcategoryHelp2": "Тези отчети могат да Ви дадат идеи за липсващо съдържание на Вашия сайт, представа за това, което Вашите посетители търсят, но не могат да намерят лесно и др.",
|
730 |
+
"SiteSearchSubcategoryHelp3": "Научете повече в ръководството за търсене в сайта.",
|
731 |
+
"SubmenuPageTitles": "Заглавия на страници",
|
732 |
"SubmenuPagesEntry": "Входни страници",
|
733 |
"SubmenuPagesExit": "Изходни страници",
|
|
|
734 |
"SubmenuSitesearch": "Търсене на сайт",
|
735 |
+
"TimeSpentInReferringAction": "Време, прекарано в препращащо действие",
|
736 |
"WidgetEntryPageTitles": "Входящо заглавие на страницата",
|
737 |
"WidgetExitPageTitles": "Изходящо заглавие на страницата",
|
|
|
|
|
738 |
"WidgetPageTitles": "Заглавия на страниците",
|
739 |
"WidgetPageTitlesFollowingSearch": "Заглавия на страници следящи търсенията на сайтове",
|
740 |
"WidgetPageUrlsFollowingSearch": "Страници следящи търсенията на сайтове",
|
741 |
+
"WidgetPagesEntry": "Входящи страници",
|
742 |
+
"WidgetPagesExit": "Изходящи страници",
|
743 |
"WidgetSearchCategories": "Търси категории",
|
744 |
"WidgetSearchKeywords": "Ключови думи търсени от сайта",
|
745 |
+
"WidgetSearchNoResultKeywords": "Търсене по ключови думи без резултати"
|
|
|
|
|
746 |
},
|
747 |
"Annotations": {
|
748 |
"AddAnnotationsFor": "Добави анотации за %s...",
|
752 |
"ClickToEdit": "Цъкни за да редактираш тази анотация.",
|
753 |
"ClickToEditOrAdd": "Натисни за да редактираш или добавиш нова анотация.",
|
754 |
"ClickToStarOrUnstar": "Натиснете, за да отбележите или премахнете звезда за този коментар.",
|
755 |
+
"CreateNewAnnotation": "Създайте нова анотация...",
|
756 |
"EnterAnnotationText": "Въведете своята бележка…",
|
757 |
"HideAnnotationsFor": "Скриване на анотациите за %s...",
|
758 |
"IconDesc": "Вижте бележките за този период от време.",
|
765 |
"YouCannotModifyThisNote": "Вие не можете да променяте тази анотация, защото все още не сте я създали или нямате администраторски права за този сайт."
|
766 |
},
|
767 |
"Contents": {
|
768 |
+
"ContentImpression": "Импресия на съдържание",
|
769 |
+
"ContentInteraction": "Взаимодействие със съдържание",
|
770 |
+
"ContentInteractions": "Взаимодействия със съдържание",
|
771 |
"ContentName": "Име на съдържанието",
|
772 |
+
"ContentNameReportDocumentation": "Този отчет показва имената на съдържанието, което Вашите посетители са гледали и с което са взаимодействали.",
|
773 |
+
"ContentNames": "Имена на съдържанието",
|
774 |
+
"ContentPiece": "Част от съдържанието",
|
775 |
+
"ContentPieceReportDocumentation": "Този отчет показва частите от съдържанието, които Вашите посетители са разглеждали и с които са взаимодействали.",
|
776 |
+
"ContentPieces": "Части от съдържанието",
|
777 |
"ContentTarget": "Целево съдържание",
|
778 |
+
"ContentTargets": "Цели на съдържанието",
|
779 |
+
"Contents": "Съдържание",
|
780 |
+
"ContentsSubcategoryHelp1": "Проследяването на съдържанието Ви помага да определите популярността на конкретни части от съдържание на всяка страница от Вашия уебсайт или приложение. Този раздел отчита броя на импресиите и взаимодействията, които получават различните части от съдържанието на Вашия сайт.",
|
781 |
+
"ContentsSubcategoryHelp2": "Научете повече в ръководството за проследяване на съдържанието.",
|
782 |
+
"Impressions": "Импресии",
|
783 |
+
"ImpressionsMetricDocumentation": "Броят пъти, когато блок със съдържание, като банер или реклама, е бил показан на страница.",
|
784 |
+
"InteractionRate": "Честота на взаимодействие",
|
785 |
+
"InteractionRateMetricDocumentation": "Съотношението на импресиите в съдържанието към взаимодействията.",
|
786 |
+
"InteractionsMetricDocumentation": "Броят пъти, когато е имало взаимодействие с блок съдържание (напр. „кликване“ върху банер или реклама).",
|
787 |
+
"PluginDescription": "Проследяването на съдържание позволява измерването на преглеждания, кликове, CTR на който и да е елемент от Вашите страници (банери, реклами, картинки и т.н.)."
|
788 |
},
|
789 |
"CoreAdminHome": {
|
790 |
+
"AddNewTrustedHost": "Добави нов доверен хост",
|
791 |
"Administration": "Администрация",
|
792 |
"ArchivingSettings": "Настройки за архивиране",
|
793 |
"BrandingSettings": "Настройки на бранда",
|
794 |
+
"BruteForce": "Brute Force атака",
|
795 |
+
"CheckToOptIn": "Поставете отметка в това квадратче, за да се включите.",
|
796 |
"ClickHereToOptIn": "Натиснете тук за съгласие.",
|
797 |
"ClickHereToOptOut": "Натиснете тук за отказ.",
|
798 |
+
"ConfirmDeleteAllTrackingFailures": "Сигурни ли сте, че искате да изтриете всички неуспешни проследявания?",
|
799 |
+
"ConfirmDeleteThisTrackingFailure": "Сигурни ли сте, че искате да изтриете този провал в проследяването?",
|
800 |
+
"Cors": "Домейни споделяне на ресурси за кръстосан произход (CORS)",
|
801 |
+
"CorsDomains": "Домейни споделяне на ресурси за кръстосан произход (CORS)",
|
802 |
+
"CorsDomainsHelp": "Можете да дефинирате домейни или поддомейни като http:\/\/example.com или http:\/\/stats.example.com. Или за да разрешите искания за кръстосани домейни за всички домейни, просто добавете *",
|
803 |
+
"CustomLogoFeedbackInfo": "Ако персонализирате логото на Matomo, може да Ви е полезно и да скриете връзката %1$s в горното меню. За да направите това, можете да деактивирате плъгина за обратна връзка в страницата %2$sУправление на плъгини%3$s.",
|
804 |
"CustomLogoHelpText": "Можете да модифицирате логото на Matomo, което да се показва в интерфейса на потребителя и имейлите с отчети.",
|
805 |
+
"DeleteAllFailures": "Изтрийте всички неуспехи",
|
806 |
+
"DevelopmentProcess": "Въпреки че нашият процес на разработка включва хиляди автоматизирани тестове, бета тестери играят ключова роля за постигането на „политика без грешки“ в Matomo.",
|
807 |
"EmailServerSettings": "Настройки сървър на е-поща",
|
808 |
+
"ErrorEmailFromAddressNotValid": "SMTP адресът \"от\" не е валиден",
|
809 |
+
"FaviconUpload": "Изберете Favicon за качване",
|
810 |
+
"FileUploadDisabled": "Качването на файлове не е активирано във Вашата PHP конфигурация. За да качите Вашето персонализирано лого, моля, задайте %s в php.ini и рестартирайте Вашия уеб сървър.",
|
811 |
"ForBetaTestersOnly": "Само за бета тестери",
|
812 |
+
"HttpTrackingApi": "API за проследяване на HTTP",
|
813 |
+
"HttpTrackingApiDescription": "API-то за проследяване на %1$sHTTP%2$s Ви позволява да проследявате всичко. Това може да е полезно, ако използвате език за програмиране, за който все още не съществува SDK. Може също да е полезно, когато искате да проследявате устройства или приложение по специален начин.",
|
814 |
"ImageTracking": "Проследяване на изображенията",
|
815 |
"ImageTrackingIntro1": "Когато посетителят е изключил JavaScript или когато JavaScript не може да бъде използван, може да се използва проследяващата връзка към изображение, за да бъдат проследени посетителите.",
|
816 |
+
"ImageTrackingIntro2": "Генерирайте връзката по-долу и копирайте и поставете генерирания HTML код в страницата. Ако използвате това като резервен вариант за проследяване на JavaScript, можете да го обградите в тагове %1$s.",
|
817 |
+
"ImageTrackingIntro3": "За целия списък с опции, които можете да използвате с връзка за проследяване на изображение, вижте %1$sДокументацията на API за проследяване%2$s.",
|
818 |
"ImageTrackingLink": "Връзка към изображение, за което се води отчет",
|
819 |
+
"ImportFromGoogleAnalytics": "Импортиране от Google Analytics",
|
820 |
+
"ImportFromGoogleAnalyticsDescription": "Ако използвате Google Анализ и преминавате към Matomo, можете да импортирате съществуващите си данни с помощта на приставката %1$sGoogleAnalyticsImporter%2$s.",
|
821 |
"ImportingServerLogs": "Импортиране на сървърни логове",
|
822 |
"ImportingServerLogsDesc": "Една алтернатива за проследяване на посетителите чрез браузъра (или чрез JavaScript или препратка към файла) е непрекъснато да се внасят сървърните логове. Научете повече за %1$sServer Log File Analytics%2$s.",
|
823 |
+
"InvalidPluginsWarning": "Следните плъгини не са съвместими с %1$s и не могат да бъдат заредени: %2$s.",
|
824 |
+
"InvalidPluginsYouCanUninstall": "Може да обновите или деинсталирате тези плъгини чрез %1$sУправление на плъгини%2$s.",
|
825 |
+
"JSTrackingIntro1": "Можете да проследявате посетителите на Вашия уебсайт по много различни начини. Препоръчителният начин да го направите е чрез JavaScript. За да използвате този метод, трябва да се уверите, че всяка уеб страница на Вашия уебсайт има JavaScript код, който можете да генерирате тук.",
|
826 |
+
"JSTrackingIntro2": "След като имате нужния JavaScript код за вашия сайт, го копирайте и поставете във всички страници, които искате да следите с Matomo.",
|
827 |
+
"JSTrackingIntro3a": "В повечето уебсайтове, блогове, CMS и т.н. можете да използвате предварително направен плъгин, който да свърши техническата работа вместо Вас. (Вижте нашия %1$s списък с плъгини, използвани за интегриране на Matomo %2$s.)",
|
828 |
+
"JSTrackingIntro3b": "Ако не съществува плъгин, можете да редактирате шаблоните на уебсайта си и да добавите проследяващия код на JavaScript към <\/head> маркер, който често се дефинира в 'header.php', 'header.tpl' или подобен шаблонен файл.",
|
829 |
+
"JSTrackingIntro4": "В случай, че не искате да използвате JavaScript за водене на статистика за посетителите %1$sгенерирай изображение под формата на проследяваща връзка по-долу%2$s.",
|
830 |
+
"JSTrackingIntro5": "В случай, че желаете да събирате повече информация за посещенията, моля, вижте %1$sMatomo Javascript Tracking документацията%2$s, за списък с наличните функции. Използвайки тези функции може да следите цели, персонализирани променливи, поръчки, изоставени колички и други.",
|
831 |
"JSTracking_CampaignKwdParam": "Параметър ключова дума на кампанията",
|
832 |
"JSTracking_CampaignNameParam": "Параметър име на кампанията",
|
833 |
+
"JSTracking_CodeNoteBeforeClosingHead": "Уверете се, че този код е на всяка страница от Вашия уебсайт. Препоръчваме да го поставите непосредствено преди затварящия таг %1$s.",
|
834 |
+
"JSTracking_CodeNoteBeforeClosingHeadEmail": "Уверете се, че този код е вграден чрез скрипт елемент на всяка страница от Вашия уебсайт. Препоръчваме да го поставите непосредствено преди затварящия HEAD таг.",
|
835 |
+
"JSTracking_CrossDomain": "По подразбиране идентификационният номер на посетителя, който идентифицира уникален посетител, се съхранява в бисквитките на браузъра, които могат да бъдат достъпни само от страници в същия домейн. Активирането на кръстосано свързване на домейни Ви позволява да проследявате всички действия и показвания на страници на конкретен посетител при едно и също посещение, дори когато преглежда страници в няколко домейна. Всеки път когато потребител кликне върху връзка към някой от URL адресите на псевдонима на Вашия уебсайт, той ще добави URL параметър pk_vid, препращащ идентификатора на посетителя.",
|
836 |
+
"JSTracking_CrossDomain_NeedsMultipleDomains": "Забележка: За да използвате кръстосано свързване на домейни, трябва да посочите повече от едно име на домейн (URL) за Вашия уебсайт.",
|
837 |
"JSTracking_CustomCampaignQueryParam": "Използвайте произволно име на параметър заявка за име и ключ на кампанията",
|
838 |
"JSTracking_CustomCampaignQueryParamDesc": "Забележка: %1$sMatomo автоматично ще засече Google Analytics параметрите.%2$s",
|
839 |
"JSTracking_DisableCookies": "Изключване на всички проследяващи бисквитки",
|
840 |
+
"JSTracking_DisableCookiesDesc": "Деактивира всички бисквитки от първа страна. Съществуващите бисквитки на Matomo за този уебсайт ще бъдат изтрити при следващото показване на страница.",
|
841 |
+
"JSTracking_EnableCrossDomainLinking": "Активира кръстосано свързване на домейни",
|
842 |
"JSTracking_EnableDoNotTrack": "Активиране на режим за засичане на включена функция „Не проследявай“",
|
|
|
843 |
"JSTracking_EnableDoNotTrackDesc": "Заявките за следене няма да бъдат изпратени, ако посетителите не желаят да бъде събирана информация за тях.",
|
844 |
+
"JSTracking_EnableDoNotTrack_AlreadyEnabled": "Забележка: От страна на сървъра е включена настройката „Не проследявай“, така че тази настройка няма да окаже ефект.",
|
845 |
+
"JSTracking_EndNote": "Забележка: Можете да генерирате персонализиран код за проследяване в администраторската секция %1$sПроследяващ код%2$s.",
|
846 |
+
"JSTracking_GroupPageTitlesByDomain": "Добавете домейна на сайта към заглавието на страницата при проследяване",
|
847 |
"JSTracking_GroupPageTitlesByDomainDesc1": "В случай, че някой посети страница „За“ в блога, %1$s ще бъде записан\/о в 'Блог \/ За'. Това е най-лесният начин, за да се направи преглед на трафика по поддомейн.",
|
848 |
+
"JSTracking_MergeAliases": "В доклада за „Изходните страници“ скрийте кликванията до познати адреси на",
|
849 |
+
"JSTracking_MergeAliasesDesc": "Така че кликванията върху връзки към URL адреси на псевдоними (напр. %s) няма да се отчитат като „Извън връзка“.",
|
850 |
"JSTracking_MergeSubdomains": "Проследяване на посетителите във всички поддомейни на",
|
851 |
"JSTracking_MergeSubdomainsDesc": "Ако един посетител разгледа %1$s и %2$s, това ще се брои като едно уникално посещение.",
|
852 |
"JSTracking_PageCustomVars": "Проследяване на персонализирана променлива за всеки преглед на страница",
|
853 |
"JSTracking_PageCustomVarsDesc": "Пример: име на променливата „Категория“ и стойност „Бели книжа“.",
|
854 |
+
"JSTracking_TrackNoScript": "Проследявайте потребители с деактивиран JavaScript",
|
855 |
"JSTracking_VisitorCustomVars": "Проследяване на персонализирани променливи за този посетител",
|
856 |
"JSTracking_VisitorCustomVarsDesc": "Например, с име на променлива „Тип“ и стойност „Клиент“.",
|
857 |
+
"JavaScriptTracking": "JavaScript Проследяване",
|
858 |
+
"JsTrackingCodeMissingEmail1": "Преди няколко дни добавихте уебсайта „%s“ към Вашия Matomo Analytics. Току-що проверихме и изглежда, че Вашият Matomo няма записан трафик за този уебсайт.",
|
859 |
+
"JsTrackingCodeMissingEmail2": "За да започнете да проследявате данни и да получавате информация за потребителите си, ще трябва да настроите проследяване във Вашия уебсайт или мобилно приложение. За уебсайтове просто вградете проследяващия код точно преди тага %s.",
|
860 |
+
"JsTrackingCodeMissingEmail3": "За да намерите и персонализирате своя проследяващ код, %1$s кликнете тук%2$s (или разгледайте ръководството за %3$sJavaScript Tracking Client %4$s).",
|
861 |
+
"LearnMore": "Научете повече",
|
862 |
+
"LogoNotWriteableInstruction": "За да използвате Вашето персонализирано лого вместо логото на Matomo по подразбиране, дайте разрешение за запис на тази директория: %1$s Matomo се нуждае от достъп за запис за Вашите лога, съхранени във файловете %2$s.",
|
863 |
"LogoUpload": "Изберете логото за качване",
|
864 |
+
"LogoUploadFailed": "Каченият файл не можа да бъде обработен. Моля, проверете дали файлът има валиден формат.",
|
865 |
"LogoUploadHelp": "Моля, качете файла в %1$s формати с минимална височина %2$s пиксела.",
|
866 |
+
"LtsReleases": "Версиите на LTS (Дългосрочна поддръжка) получават обновления само за сигурност и корекции на грешки.",
|
867 |
+
"MenuDevelopment": "Развитие",
|
868 |
"MenuDiagnostic": "Диагностика",
|
869 |
"MenuGeneralSettings": "Основни настройки",
|
870 |
"MenuMeasurables": "Измерими",
|
871 |
+
"MenuSystem": "Система",
|
872 |
+
"MissingTrackingCodeEmailSubject": "Няма записан трафик за %s в Matomo Analytics, започнете сега",
|
873 |
+
"NTrackingFailures": "%s неуспехи при проследяване",
|
874 |
+
"NoKnownFailures": "Няма известни грешки при проследяване.",
|
875 |
"OptOutComplete": "Отказът е приет; вашите посещения в този уебсайт няма да бъдат записвани от Инструмента за Уеб анализ.",
|
876 |
"OptOutCompleteBis": "Запомнете, че ако изтриете вашите бисквитки или ако смените компютъра или уеб браузъра ще е нужно да направите процедурата за отказ отново.",
|
877 |
+
"OptOutDntFound": "Не се проследявате, тъй като браузърът Ви съобщава, че не искате. Това е настройка на Вашия браузър, така че няма да можете да се включите, докато не деактивирате функцията „Не проследявай“.",
|
878 |
+
"OptOutErrorNoCookies": "Функцията за отказ от проследяване изисква бисквитките да бъдат активирани.",
|
879 |
+
"OptOutErrorNotHttps": "Функцията за отказ от проследяване може да не работи, защото този сайт не е зареден през HTTPS. Моля, презаредете страницата, за да проверите дали състоянието на отказ от проследяване се е променило.",
|
880 |
+
"OptOutErrorWindowOpen": "Функцията за отказване за проследяване може да не работи, защото изглежда, че изскачащият прозорец за отказ е блокиран. Моля, презаредете страницата, за да проверите дали състоянието на отказ от проследяване се е променило.",
|
881 |
"OptOutExplanation": "Matomo е ангажиран с осигуряването на поверителност в Интернет. За да позволите на потребителите си да се откажат от Matomo Web Analytics, можете да добавите нужният HTML код в една от вашите уеб страници, например в раздела Поверителност.",
|
882 |
+
"OptOutExplanationIntro": "Този код ще покаже iFrame, съдържащ връзка за Вашите посетители да се откажат от Matomo, като зададат бисквитка за отказ в своите уеб браузъри. Вижте по-долу (или %1$s кликнете тук%2$s), за да видите съдържанието, което ще се показва от iFrame.",
|
883 |
"OptOutForYourVisitors": "Matomo отказ за вашите посетители",
|
884 |
+
"OptingYouOut": "Извършване на отказ от проследяване. Моля, изчакайте…",
|
885 |
+
"PersonalPluginSettings": "Лични настройки на плъгин",
|
886 |
"PiwikIsInstalledAt": "Matomo е инсталиран на",
|
887 |
+
"PluginSettingChangeNotAllowed": "Нямате право да променяте стойността на настройката \"%1$s\" в плъгин \"%2$s\"",
|
888 |
+
"PluginSettingReadNotAllowed": "Нямате право да четете стойността на настройката \"%1$s\" в плъгин \"%2$s\"",
|
889 |
+
"PluginSettings": "Настройки на плъгин",
|
890 |
+
"PluginSettingsIntro": "Тук могат да се променят настройките за следните плъгини от трети страни:",
|
891 |
+
"PluginSettingsSaveFailed": "Не можаха да се запишат настройките на плъгина",
|
892 |
+
"PluginSettingsSaveSuccess": "Настройките на плъгина са актуализирани.",
|
893 |
+
"PluginSettingsValueNotAllowed": "Стойността за полето \"%1$s\" в плъгина \"%2$s\" не е разрешена",
|
894 |
+
"Problem": "Проблем",
|
895 |
+
"ProtocolNotDetectedCorrectly": "В момента разглеждате Matomo през защитена SSL връзка (използвайки HTTPS), но Matomo може да открие само незащитена връзка на сървъра.",
|
896 |
+
"ProtocolNotDetectedCorrectlySolution": "За да сте сигурни, че Matomo сигурно изисква и обслужва вашето съдържание през HTTPS, можете да редактирате вашия файл %1$s и или да конфигурирате настройките на прокси сървъра си, или можете да добавите реда %2$s под секцията %3$s. %4$sНаучете повече%5$s",
|
897 |
+
"ReleaseChannel": "Канал за нови версии",
|
898 |
+
"SecurityNotificationAllTokenAuthDeletedBody": "Някой е изтрил всички токени за auth в профила Ви.",
|
899 |
+
"SecurityNotificationCheckTwoFactor": "Моля, проверете приложението или устройството си за двуфакторна автентикация.",
|
900 |
+
"SecurityNotificationEmailSubject": "Известие за сигурност",
|
901 |
+
"SecurityNotificationIfItWasYou": "Ако сте били Вие, продължете. Ако не разпознавате тази дейност, моля, сменете паролата си.",
|
902 |
+
"SecurityNotificationRecoveryCodesRegeneratedBody": "Някой е генерирал нови кодове за възстановяване на двуфакторна автентикация за Вашия акаунт.",
|
903 |
+
"SecurityNotificationRecoveryCodesShowedBody": "Някой е разглеждал кодовете за възстановяване на двуфакторната автентикация на Вашия акаунт.",
|
904 |
+
"SecurityNotificationSettingsChangedByOtherSuperUserBody": "Друг супер потребител (%1$s) е променил системните настройки. Засегнати настройки: %2$s. Ако знаете за тази дейност, продължете. Ако не разпознавате тази дейност, моля, свържете се с другите супер потребители.",
|
905 |
+
"SecurityNotificationSettingsChangedByUserBody": "Някой е променил системните настройки. Засегнати настройки: %s.",
|
906 |
+
"SecurityNotificationTokenAuthCreatedBody": "Някой е създал токен за auth (описание: %s) в профила Ви. Ако не сте били Вие, изтрийте токена.",
|
907 |
+
"SecurityNotificationTokenAuthDeletedBody": "Някой е изтрил токен за удостоверяване (описание: %s) във Вашия акаунт.",
|
908 |
+
"SecurityNotificationTwoFactorAuthDisabledBody": "Някой е деактивирал двуфакторната автентикация във Вашия акаунт.",
|
909 |
+
"SecurityNotificationTwoFactorAuthEnabledBody": "Някой е активирал двуфакторната автентикация във Вашия акаунт.",
|
910 |
+
"SecurityNotificationUserCreatedBody": "Някой е създал нов потребител (потребителско име: %s) във Вашия акаунт.",
|
911 |
+
"SecurityNotificationUserDeletedBody": "Някой е изтрил потребител (потребителско име: %s) във Вашия акаунт.",
|
912 |
+
"SendPluginUpdateCommunication": "Изпращане на имейл, когато е налична актуализация на плъгин",
|
913 |
+
"SendPluginUpdateCommunicationHelp": "Ще бъде изпратен имейл до супер потребители, когато има налична нова версия на плъгин.",
|
914 |
+
"SettingsSaveSuccess": "Настройките са обновени.",
|
915 |
+
"SinglePageApplicationDescription": "Ако проследявате едностранично приложение (SPA) или прогресивно уеб приложение (PWA), моля, вижте %1$s това ръководство %2$s.",
|
916 |
+
"Solution": "Решение",
|
917 |
"StableReleases": "Ако Matomo е критично важен за вашият бизнес, използвайте последната стабилна версия. Ако използвате последна бета и откриете бъг или имате предложение, моля %1$sвижте тук%2$s.",
|
918 |
+
"SystemPluginSettings": "Системни настройки на плъгин",
|
919 |
"TrackAGoal": "Проследяване на цел",
|
920 |
"TrackingCode": "Код за проследяване",
|
921 |
+
"TrackingCodeIntro": "Matomo Ви предлага различни начини за вграждане на проследяващия код за Вашия уебсайт, мобилно приложение и дори за всяко устройство или приложение.",
|
922 |
+
"TrackingFailureAuthenticationProblem": "Заявката не беше автентикирана, но се изискваше автентикаране.",
|
923 |
+
"TrackingFailureAuthenticationSolution": "Задайте или коригирайте „token_auth“ във Вашата заявка за проследяване.",
|
924 |
+
"TrackingFailureInvalidSiteProblem": "Сайтът не съществува.",
|
925 |
+
"TrackingFailureInvalidSiteSolution": "Актуализирайте конфигурирания idSite в тракера.",
|
926 |
+
"TrackingFailures": "Неуспехи при проследяването",
|
927 |
+
"TrackingFailuresEmail1": "Това е само за да Ви уведомим, че %s различни видове неуспехи при проследяване са възникнали през последните дни.",
|
928 |
+
"TrackingFailuresEmail2": "За да видите всички неуспешни заявки за проследяване %1$s, кликнете тук %2$s.",
|
929 |
+
"TrackingFailuresEmailSubject": "Неуспехи при проследяването във Вашия Matomo Analytics",
|
930 |
+
"TrackingFailuresIntroduction": "Тази страница изброява неуспехите при проследяване, случили се през последните %s дни. Моля, имайте предвид, че се записват само най-често срещаните грешки при проследяване, а не всички.",
|
931 |
+
"TrackingURL": "URL за проследяване",
|
932 |
+
"TrustedHostConfirm": "Сигурен ли сте, че желаете да промените довереното Matomo хост име?",
|
933 |
"TrustedHostSettings": "Доверено Matomoi хост име",
|
934 |
+
"TwoFactorAuth": "Двуфакторна автентикация",
|
935 |
+
"UiDemo": "Демо на потребителския интерфейс",
|
936 |
+
"UncheckToOptOut": "Махнете отметката от това поле, за да се откажете.",
|
937 |
"UpdateSettings": "Настройки за обновяване",
|
938 |
"UseCustomLogo": "Използвайте изработено лого",
|
939 |
"ValidPiwikHostname": "Валидно Matomo хост име",
|
940 |
+
"ViewAllTrackingFailures": "Вижте всички неуспехи при проследяване",
|
941 |
+
"WhatIsNew": "Какво ново",
|
942 |
+
"WhatIsNewNoChanges": "В момента няма нищо ново",
|
943 |
+
"WhatIsNewNoChangesTitle": "Няма скорошни промени",
|
944 |
+
"WhatIsNewTitle": "Ето какво е новото в Matomo",
|
945 |
+
"WhatIsNewTooltip": "Научете какво е новото в Matomo",
|
946 |
"WithOptionalRevenue": "с опция за приходите",
|
947 |
+
"YouAreNotOptedOut": "Не сте се отписали.",
|
948 |
+
"YouAreOptedOut": "В момента сте отказали.",
|
949 |
"YouMayOptOut": "Можете да изберете да нямате уникална уеб анализ бисквитка с идектификационен номер, свързан към вашият компютър, за да избегнете агрегацията на анализ на събраната информация на този уеб сайт.",
|
|
|
950 |
"YouMayOptOut2": "Имате възможност да забраните Вашите действия да бъдат анализирани и свързани с Вас.",
|
951 |
+
"YouMayOptOut3": "Това ще защити Вашето лично пространство, но ще попречи на собственика да се обучи от Вашите действия и да подобри възможностите за обслужване за Вас и за други потребители.",
|
952 |
+
"YouMayOptOutBis": "За да направите този избор, моля кликнете долу за да получите биксвитката за отказване."
|
953 |
},
|
954 |
"CoreHome": {
|
955 |
+
"AdblockIsMaybeUsed": "В случай, че използвате рекламен блокер, моля, деактивирайте го за този сайт, за да сте сигурни, че Matomo работи без проблеми.",
|
956 |
+
"AddTotalsRowDataTable": "Отчетът не показва общия ред %s Показване на реда с общите суми",
|
957 |
"CategoryNoData": "Няма данни в тази категория. Опитайте \"Включи всички данни\".",
|
958 |
+
"ChangeCurrentWebsite": "Изберете уебсайт. Избран в момента уебсайт: %s",
|
959 |
+
"ChangePeriod": "Промяна на периода",
|
960 |
+
"ChangeVisualization": "Промяна на визуализацията",
|
961 |
"CheckForUpdates": "Проверка за обновления",
|
962 |
"CheckPiwikOut": "Проверка на Matomoi изход!",
|
963 |
+
"ChooseX": "Изберете %1$s",
|
964 |
+
"ClickRowToExpandOrContract": "Кликнете върху този ред, за да разширите или свиете подтаблицата.",
|
965 |
+
"ClickToEditX": "Кликнете за промяна на %s",
|
966 |
+
"ClickToSeeFullInformation": "Кликнете, за да видите пълната информация",
|
967 |
+
"CloseSearch": "Затваряне на търсенето",
|
968 |
"CloseWidgetDirections": "Можете да затворите тази джаджа, като кликнете на 'Х' иконата в горната част на джаджата.",
|
969 |
+
"CssDidntLoad": "Вашият браузър не можа да зареди стила на тази страница.",
|
970 |
+
"CustomLimit": "Персонализиран лимит",
|
971 |
+
"DataForThisReportHasBeenDisabled": "Понастоящем сегментирането е деактивирано за този отчет. Моля, проверете %1$s този ЧЗВ %2$s за повече подробности.",
|
972 |
"DataForThisReportHasBeenPurged": "Датата на този доклад е стара с %s месеца и ще бъде изтрита.",
|
973 |
+
"DataTableCombineDimensions": "Размерите се показват отделно %s Показване на комбинираните размери",
|
974 |
"DataTableExcludeAggregateRows": "Сумарните редове са показани %s Скриване",
|
975 |
+
"DataTableHowToSearch": "Натиснете Enter или кликнете върху иконата за търсене, за да търсите",
|
976 |
"DataTableIncludeAggregateRows": "Сумарните редове са скрити %s Покажи ги",
|
977 |
+
"DataTableShowDimensions": "Размерите са комбинирани %s Показване на размерите отделно",
|
978 |
+
"DateInvalid": "Посочената комбинация от дата и период е невалидна. Моля, изберете валидна дата в селектора на дати.",
|
979 |
"Default": "подразбиране",
|
980 |
+
"DevicesSubcategoryHelp": "Разделът Устройства Ви помага да разберете технологията, която Вашите посетители използват за достъп до Вашия сайт. Ще видите отчети за типа устройство и конкретни модели, за да можете да оптимизирате сайта си за най-популярните устройства.",
|
981 |
"DonateCall1": "Matomo винаги ще бъде безплатен за използване, но това не означава, че ние нямаме разходи за развитието му.",
|
982 |
"DonateCall2": "Matomo се нуждае от вашата подкрепа, за да продължава да расте и процъфтява.",
|
983 |
+
"DonateCall3": "Ако смятате, че Matomo е добавил значителна стойност към Вашия бизнес или начинание, %1$sмоля, обмислете да дарите %2$s или %3$sза закупуване на премиум функционалности %4$s. Всяка стотинка ще помогне.",
|
984 |
+
"EndDate": "Крайна дата",
|
985 |
+
"EndShortcut": "Край",
|
986 |
+
"EngagementSubcategoryHelp1": "Разделът за ангажираност предоставя отчети, които помагат да се определи количествено колко нови и завърнали се посетители получавате. Можете също да прегледате отчети, които разбиват средното време и броя на страниците на посещение, както и броя пъти, когато посетител е бил на Вашия сайт и най-често срещания брой дни между посещенията.",
|
987 |
+
"EngagementSubcategoryHelp2": "Това може да Ви помогне да оптимизирате за честота и посещения с високо взаимодействие в допълнение към максимизирането на обхвата Ви.",
|
988 |
+
"EnterZenMode": "Влезте в режим Zen (скрийте менютата)",
|
989 |
+
"ExceptionNotAllowlistedIP": "Не можете да използвате Matomo, тъй като Вашият IP %s не е разрешен.",
|
990 |
"ExcludeRowsWithLowPopulation": "Всички редове са показани %s С изключение на тези с ниски стойности",
|
991 |
+
"ExitZenMode": "Излизане от режим Zen (показване на менютата)",
|
992 |
+
"ExpandSubtables": "Разширете подтаблиците",
|
993 |
+
"ExportFormat": "Формат за експортиране",
|
994 |
+
"ExportTooltip": "Забележка: За да използвате генерирания URL адрес за експортиране, ще трябва да посочите означение за удостоверяване на приложението. Можете да конфигурирате тези токени в Администратор -> Сигурност -> Удостоверяване на токени.",
|
995 |
+
"ExportTooltipWithLink": "Забележка: За да използвате генерирания URL адрес за експортиране, ще трябва да посочите означение за удостоверяване на приложението. Можете да конфигурирате тези токени в %1$s[Администратор -> Сигурност -> Токени]%2$s. Заменете %3$s в URL адреса за експортиране с Вашия токен за удостоверяване. Предупреждение: Никога не споделяйте URL адреса с истинския маркер с никой друг.",
|
996 |
"ExternalHelp": "Помощ (отваря се в нов прозорец)",
|
997 |
"FlattenDataTable": "Този доклад е йерархичен %s Направете го плосък",
|
998 |
+
"FlattenReport": "Изравняване на отчета",
|
999 |
+
"FormatMetrics": "Показатели за форматиране",
|
1000 |
+
"HideExportUrl": "Скриване на URL за експортиране",
|
1001 |
+
"HomeShortcut": "Начало",
|
1002 |
"IncludeRowsWithLowPopulation": "Редове с ниски стойности са скрити %s Покажи всички редове",
|
1003 |
"InjectedHostEmailBody": "Здравейте, днес се опитах да достъпя Matomo и се натъкнах на предупреждение за неизвестно име на машината.",
|
1004 |
"InjectedHostEmailSubject": "Matomo е бил достъпен чрез неизвестно име: %s",
|
1005 |
+
"InjectedHostNonSuperUserWarning": "%1$sКликнете тук за безопасен достъп до Matomo%2$s и премахнете това предупреждение. Може също да искате да се свържете с Вашия администратор на Matomo и да го уведомите за този проблем (%3$sкликнете тук за имейл %4$s).",
|
1006 |
+
"InjectedHostSuperUserWarning": "Възможно е конфигурацията на Matomo да е неправилна (това се случва когато Matomo е бил изместен на нов сървър или друг адрес). Вие можете или %1$sда кликнете тук и да добавите %2$s като валиден Matomo адрес (ако сте сигурни в достоверността му)%3$s, или %4$sда кликнете тук и да посетите %5$s, за да достъпите Matomo безопасно%6$s.",
|
1007 |
"InjectedHostWarningIntro": "В момента достъпвате Matomo от %1$s, но Matomo е настроен да работи чрез този адрес: %2$s.",
|
1008 |
+
"JavascriptDisabled": "JavaScript трябва да бъде разрешен за да използвате Matomo в стандартен изглед.<br>Същото е ако JavaScript не е разрешен или браузърът не го поддържа.<br>За да използвате стандартен изглед разрешете JavaScript от настройките на Вашия браузър и %1$sопитайте отново%2$s.<br>",
|
1009 |
+
"JsDidntLoad": "Вашият браузър не успя да зареди скриптовете на тази страница.",
|
1010 |
+
"LeadingAnalyticsPlatformRespectsYourPrivacy": "Водещата отворена платформа за анализ, която зачита поверителността на личните Ви данни.",
|
1011 |
+
"MacPageDown": "Fn + стрелка надясно",
|
1012 |
+
"MacPageUp": "Fn + стрелка наляво",
|
1013 |
+
"MainNavigation": "Основна навигация",
|
1014 |
"Menu": "Меню",
|
1015 |
+
"MenuEntries": "Записи в менюто",
|
1016 |
"NoPrivilegesAskPiwikAdmin": "Вие се логнахте в като '%1$s' но изглежда че нямате разрешение от Matomo. %2$s Попитайте Вашият Matomo администратор (клик на email)%3$s да Ви даде \"поглед\" достъп до сайта.",
|
1017 |
+
"NoSuchPage": "Тази страница не съществува",
|
1018 |
+
"OneClickUpdateNotPossibleAsMultiServerEnvironment": "Актуализацията с едно кликване не е възможна, тъй като използвате Matomo с множество сървъри. Моля, изтеглете най-новата версия от %1$s, за да продължите.",
|
1019 |
+
"OnlyForSuperUserAccess": "Този уиджет се показва в таблото за управление по подразбиране само за потребители с достъп на супер потребител.",
|
1020 |
+
"PageDownShortcutDescription": "за да стигнете до края на страницата",
|
1021 |
+
"PageUpShortcutDescription": "за да стигнете до горната част на страницата",
|
1022 |
+
"PeriodHasOnlyRawData": "Изглежда отчетите за този период все още не са обработени. Искате ли да видите какво се случва сега? Разгледайте %1$sРегистъра на посещенията%2$s или изберете друг период от дата, докато се генерират отчетите.",
|
1023 |
"PeriodRange": "Период",
|
1024 |
+
"PivotBySubtable": "Този отчет не е пивотиран %1$s Пивот от %2$s",
|
1025 |
+
"Profilable": "Профилируеми",
|
1026 |
+
"QuickAccessTitle": "Потърсете %s. Използвайте клавишите със стрелки, за да навигирате в резултатите от търсенето. Пряк път: Натиснете 'f' за търсене.",
|
1027 |
+
"QuickLinks": "Бързи връзки",
|
1028 |
+
"ReadMoreOnlineGuide": "Прочетете повече по тази тема в онлайн ръководството.",
|
1029 |
+
"RemoveTotalsRowDataTable": "Отчетът показва общия ред %s Премахване на реда с общи суми",
|
1030 |
"ReportGeneratedOn": "Доклада е генериран за %s",
|
1031 |
"ReportGeneratedXAgo": "Доклада е генериран преди %s",
|
1032 |
+
"ReportType": "Вид на отчета",
|
1033 |
+
"ReportWithMetadata": "Отчет с метаданни",
|
1034 |
+
"ReportingCategoryHelpPrefix": "Как ми помага страницата за отчитане „%1$s > %2$s“?",
|
1035 |
+
"RowLimit": "Ограничение на редовете",
|
1036 |
+
"SearchOnMatomo": "Потърсете '%1$s' на Matomo.org",
|
1037 |
+
"SeeAvailableVersions": "Вижте наличните версии",
|
1038 |
+
"Segments": "Сегменти",
|
1039 |
+
"SharePiwikLong": "Здравейте! Туко-що открих прекрасен софтуер с отворен код: Matomo! \n\nMatomo позволява проследяването на посетителите на даден сайт безплатно. Задължително трябва да го пробвате!",
|
1040 |
"SharePiwikShort": "Matomo! Софтуер с отворен код за уеб анализ. Притежавайте вашите собствени данни.",
|
1041 |
"ShareThis": "Сподели това",
|
1042 |
+
"ShortcutCalendar": "за отваряне на календара (d означава дата)",
|
1043 |
+
"ShortcutHelp": "за отваряне на тази помощ",
|
1044 |
+
"ShortcutSearch": "за отваряне на търсенето (f означава Намери)",
|
1045 |
+
"ShortcutSegmentSelector": "за отваряне на Селектор на сегменти",
|
1046 |
+
"ShortcutWebsiteSelector": "за отваряне на Селектора на уеб сайтове",
|
1047 |
+
"ShortcutZenMode": "за режим Zen",
|
1048 |
+
"ShortcutsAvailable": "Налични преки пътища",
|
1049 |
+
"ShowExportUrl": "Показване на URL за експортиране",
|
1050 |
"ShowJSCode": "Покажи JavaScript кода за вмъкване в сайта",
|
1051 |
+
"SkipToContent": "Преминете към съдържанието",
|
1052 |
+
"SoftwareSubcategoryHelp": "Разделът за софтуер показва операционните системи, браузърите и плъгините, които Вашите посетители използват за достъп до сайта, така че да можете да оптимизирате сайта си, за да гарантирате, че е напълно съвместим с най-популярните конфигурации.",
|
1053 |
+
"StandardReport": "Стандартен отчет",
|
1054 |
+
"StartDate": "Начална дата",
|
1055 |
"SubscribeAndBecomePiwikSupporter": "Пристъпете към сигурната страница за плащане (PayPal) за да станете Matomo Supporter!",
|
1056 |
"SupportPiwik": "Подкрепи Matomo!",
|
1057 |
+
"SupportUsOn": "Подкрепете ни в",
|
1058 |
+
"SystemSummaryMysqlVersion": "Версия на MySQL",
|
1059 |
+
"SystemSummaryNActivatedPlugins": "%d активирани плъгини",
|
1060 |
+
"SystemSummaryNSegments": "%1$d сегменти",
|
1061 |
+
"SystemSummaryNSegmentsWithBreakdown": "%1$d сегменти (%2$s предварително обработени, %3$s обработени в реално време)",
|
1062 |
+
"SystemSummaryNWebsites": "%d уебсайтове",
|
1063 |
+
"SystemSummaryPhpVersion": "PHP версия",
|
1064 |
+
"SystemSummaryPiwikVersion": "Версия Matomo",
|
1065 |
+
"SystemSummaryWidget": "Резюме на системата",
|
1066 |
"TableNoData": "Няма данни за тази таблица.",
|
1067 |
+
"TechDeprecationWarning": "Започвайки от версия Matomo %1$s, Matomo ще прекрати поддръжката за %2$s. За повече информация %3$sвижте публикацията ни в блога.%4$s",
|
1068 |
+
"ThanksFromAllOfUs": "Благодарим Ви от всички нас в Matomo!",
|
1069 |
"ThereIsNoDataForThisReport": "Няма данни за този доклад.",
|
1070 |
"UnFlattenDataTable": "Този доклад е плосък %s Направете го йерархичен",
|
1071 |
+
"UndoPivotBySubtable": "Този отчет е с пивот %s Отмяна на пивот",
|
1072 |
"ViewAllPiwikVideoTutorials": "Виж всички Matomo помощни клипове",
|
1073 |
+
"VisitStatusOrdered": "Поръчано",
|
1074 |
+
"VisitStatusOrderedThenAbandoned": "Поръчана и след това изоставена кошница",
|
1075 |
+
"VisitTypeReturning": "Връщане",
|
1076 |
+
"VisitTypeReturningCustomer": "Връщащ се клиент",
|
1077 |
+
"VisitorsCategoryHelp1": "Страниците за посетители Ви разказват кои са Вашите посетители. Неща като откъде идват Вашите посетители, какви устройства и браузъри използват и кога обикновено посещават уебсайта Ви. Разберете като цяло коя е Вашата аудитория и потърсете отклонения, за да видите как аудиторията Ви може да нарасне.",
|
1078 |
+
"VisitorsCategoryHelp2": "В допълнение към общата информация за Вашите посетители, можете също да използвате %1$sДневник на посещенията%2$s, за да видите какво се е случило при всяко отделно посещение.",
|
1079 |
+
"VisitorsOverviewHelp": "Прегледът на посетителите Ви помага да разберете популярността на Вашия сайт. Той прави това, като предоставя диаграми, които показват колко посещения получава Вашият сайт за избран период и средното ниво на ангажираност за ключови функции, като например търсения и изтегляния.",
|
1080 |
"WebAnalyticsReports": "Уеб Анализи Доклади",
|
1081 |
"YouAreUsingTheLatestVersion": "Вие използвате последна версия на Matomo!",
|
1082 |
+
"YourDonationWillHelp": "Вашето дарение директно ще помогне за финансирането на нови функции и подобрения за тази платформа за анализ с отворен код. Това означава, че общността винаги ще се възползва от инструмент, който защитава поверителността и Ви позволява да контролирате данните си."
|
1083 |
},
|
1084 |
"CorePluginsAdmin": {
|
1085 |
"ActionUninstall": "Деинсталиране",
|
1086 |
"Activate": "Активирай",
|
1087 |
+
"ActivateTagManagerNow": "Активирайте Tag Manager сега",
|
1088 |
"Activated": "Активиран",
|
1089 |
"Active": "Активни",
|
1090 |
"Activity": "Активност",
|
1091 |
+
"AlwaysActivatedPluginsList": "Следните плъгини винаги са активирани и не могат да бъдат деактивирани: %s",
|
1092 |
+
"AreThereAnyRisks": "Има ли някакви рискове?",
|
1093 |
+
"AreThereAnyRisksDetails1": "Когато активирате Мениджъра на тагове, потребителите с администраторски достъп ще могат да създават персонализирани HTML тагове, тригери и променливи, които могат да изпълняват JavaScript на Вашия уебсайт. Тези персонализирани шаблони могат да доведат и до злоупотреба, например, кражба на чувствителна информация от посетителите на Вашия уебсайт (известни като %1$sXSS%2$s).",
|
1094 |
+
"AreThereAnyRisksDetails2": "Можете да деактивирате тези персонализирани шаблони от „Администрация => Общи настройки“, след като активирате Мениджъра на тагове. Като алтернатива можете също да ограничите използването на тези шаблони само до конкретни потребители или супер потребители.",
|
1095 |
"AuthorHomepage": "Начало на автор",
|
1096 |
+
"ChangeLookByManageThemes": "Можете да промените външния вид на Matomo чрез %1$sУправление на теми%2$s.",
|
1097 |
+
"ChangeSettingsPossible": "Можете да промените %1$sнастройките%2$s за този плъгин.",
|
1098 |
"Changelog": "Списък с промените",
|
1099 |
+
"CommunityContributedPlugin": "Това е плъгин, създаден от общността, предоставен Ви безплатно.",
|
1100 |
+
"ConsiderDonating": "Обмислете направата на дарение",
|
1101 |
+
"ConsiderDonatingCreatorOf": "Моля, помислете за дарение на създателя на %s",
|
1102 |
+
"CorePluginTooltip": "Основните плъгини нямат версия, тъй като се разпространяват заедно с Matomo.",
|
1103 |
"Deactivate": "Деактивирай",
|
1104 |
+
"DoMoreContactPiwikAdmins": "За да инсталирате нов плъгин или нова тема, моля, свържете се с администратор на Matomo.",
|
1105 |
+
"FileExceedsUploadLimit": "Избраният файл надвишава лимита за качване на Вашия сървър.",
|
1106 |
"History": "История",
|
1107 |
"Inactive": "Неактивни",
|
1108 |
+
"InfoPluginUpdateIsRecommended": "Актуализирайте своите плъгини сега, за да се възползвате от най-новите подобрения.",
|
1109 |
"InfoThemeIsUsedByOtherUsersAsWell": "Забележка: други %1$s потребители регистрирани в този Matomo също използват тапет %2$s.",
|
1110 |
"InfoThemeUpdateIsRecommended": "Обновете вашите тапети, за да получите последната версия.",
|
1111 |
+
"InstallNewPlugins": "Инсталиране на нови плъгини",
|
1112 |
"InstallNewThemes": "Добави нови тапети",
|
1113 |
+
"InstalledPlugins": "Инсталирани плъгини",
|
1114 |
+
"InstalledThemes": "Инсталирани теми",
|
1115 |
+
"InstallingNewPluginViaMarketplaceOrUpload": "Можете автоматично да инсталирате плъгини от Marketplace или %1$s да качите плъгин %2$s във формат .zip.",
|
1116 |
"LicenseHomepage": "Начало на лиценз",
|
1117 |
+
"LikeThisPlugin": "Харесвате ли този плъгин?",
|
|
|
1118 |
"MenuPlatform": "Платформа",
|
1119 |
"MissingRequirementsNotice": "Моля, обновете %1$s %2$s до по-нова версия, %1$s %3$s се изисква.",
|
1120 |
+
"MissingRequirementsPleaseInstallNotice": "Моля, инсталирайте %1$s %2$s, понеже се изисква от %3$s.",
|
1121 |
+
"NoPluginSettings": "Няма настройки за плъгин, които могат да бъдат конфигурирани",
|
1122 |
"NoZipFileSelected": "Моля, изберете zip файл.",
|
1123 |
+
"NotDownloadable": "Не може да се изтегли",
|
1124 |
"NumUpdatesAvailable": "Налични са обновления %s",
|
1125 |
+
"OncePluginIsInstalledYouMayActivateHere": "След като плъгинът е инсталиран, можете да го активирате или деактивирате тук.",
|
1126 |
"Origin": "Произход",
|
1127 |
"OriginCore": "Ядро",
|
1128 |
+
"OriginOfficial": "Официален",
|
1129 |
"OriginThirdParty": "Трета страна",
|
1130 |
+
"PluginActivated": "Плъгинът е активиран",
|
1131 |
+
"PluginHomepage": "Сайт на плъгина",
|
1132 |
+
"PluginNotCompatibleWith": "Плъгинът %1$s не е съвместим с %2$s.",
|
1133 |
+
"PluginNotDownloadable": "Плъгинът не може да бъде изтеглен.",
|
1134 |
+
"PluginNotDownloadablePaidReason": "Възможните причини са изтекъл или надвишен лиценз.",
|
1135 |
+
"PluginNotFound": "Плъгинът %1$s не е намерен във файловата система.",
|
1136 |
+
"PluginNotFoundAlternative": "Ако сте използвали този плъгин, опитайте да го качите отново или да го инсталирате отново от Marketplace. Ако не, кликнете върху деинсталиране, за да го премахнете от списъка.",
|
1137 |
+
"PluginNotWorkingAlternative": "Ако сте използвали този плъгин, може би ще намерите по-нова версия в Marketplace. Ако не, може да искате да го деинсталирате.",
|
1138 |
"PluginRequirement": "%1$s изисква %2$s.",
|
1139 |
+
"PluginRequiresInternet": "Този плъгин изисква работеща интернет връзка. Моля, проверете Вашата конфигурационна стойност за `enable_internet_features`, ако искате да използвате тази функция.",
|
1140 |
+
"PluginsExtendPiwik": "Плъгините разширяват функционалността на Matomo.",
|
1141 |
+
"PluginsManagement": "Управление на плъгини",
|
1142 |
"Status": "Състояние",
|
1143 |
"SuccessfullyActicated": "Успешно беше активирано <strong>%s<\/strong>.",
|
1144 |
+
"TagManagerEmailSuperUserToActivate": "Изпратете имейл до супер потребители, за да активирате тази нова функция",
|
|
|
|
|
|
|
1145 |
"TagManagerLearnMoreInUserGuide": "Научете повече в ръководството на Tag Manager",
|
1146 |
+
"TagManagerNowAvailableSubtitle": "Управлявайте лесно всичките си тагове чрез една платформа, за да получите информацията, която искате, възможностите са безкрайни!",
|
1147 |
+
"TagManagerNowAvailableTitle": "Matomo Tag Manager вече е достъпен",
|
1148 |
+
"TagManagerTeaserEmailSuperUserBody": "Здравейте, %1$sMatomo Tag Manager вече е наличен в Matomo и бих искал да използвам тази нова функция. Тъй като имате суперпотребителски достъп, можете ли да активирате тази функция през страницата на Мениджър на тагове в горното меню?%2$sURL адресът на Matomo е %3$s.%4$sБлагодаря",
|
1149 |
+
"TagManagerTeaserHideNonSuperUser": "Не се интересувам, не показвайте тази страница отново",
|
1150 |
+
"TagManagerTeaserHideSuperUser": "Не показвайте тази страница на никой потребител",
|
1151 |
+
"TeaserExtendPiwik": "Разширете Matomo с плъгини и теми",
|
1152 |
+
"TeaserExtendPiwikByPlugin": "Разширете Matomo, като %1$s инсталирате плъгини от Marketplace %2$s или %3$s качете плъгин във формат .zip %4$s.",
|
1153 |
+
"TeaserExtendPiwikByTheme": "Насладете се на нов външен вид и усещане, като %1$s инсталирате нова тема %2$s.",
|
1154 |
"Theme": "Тапет",
|
1155 |
"Themes": "Тапети",
|
1156 |
"ThemesDescription": "Тапетите могат да променят въшншия вид на потребителския интерфейс на Matomo и да осигурят ново пълноценно визуално усещане, за да се насладите на Вашите статистики.",
|
1157 |
"ThemesManagement": "Управление на тапетите",
|
1158 |
+
"UninstallConfirm": "На път сте да деинсталирате плъгин %s. Плъгинът ще бъде напълно премахнат от Вашата платформа и няма да бъде възстановен. Сигурни ли сте, че искате да направите това?",
|
1159 |
+
"UpdateSelected": "Избрано актуализиране",
|
1160 |
"Version": "Версия",
|
1161 |
+
"ViewAllMarketplacePlugins": "Вижте всички плъгини в Marketplace",
|
1162 |
+
"WeCouldNotLoadThePluginAsItHasMissingDependencies": "Плъгинът %1$s не можа да бъде зареден, тъй като има липсващи зависимости: %2$s",
|
1163 |
+
"Websites": "Сайтове",
|
1164 |
+
"WhatIsTagManager": "Какво е Tag Manager?",
|
1165 |
+
"WhatIsTagManagerDetails1": "Подобно на това как системата за управление на съдържанието (CMS) Ви предоставя цялата гъвкавост за публикуване на съдържание за Вашия уебсайт, без да имате технически познания за HTML\/CSS, системата за управление на тагове (TMS) е Вашето решение за опростяване на процеса на първо вграждане и тагове за проследяване на приложения на трети страни (известни също като фрагменти или пиксели) на Вашия уебсайт.",
|
1166 |
+
"WhatIsTagManagerDetails2": "Например ако искате да видите резултатите от Вашите реализации\/цели, регистрации за бюлетин, социални уиджети, изскачащи прозорци за излизане и кампании за ремаркетинг; това, което някога беше изключително технически и отнемащ време процес, сега се извършва лесно в TMS и отнема само няколко кликвания за прилагане.",
|
1167 |
+
"WhyUsingATagManager": "Защо Tag Manager?",
|
1168 |
+
"WhyUsingATagManagerDetails1": "Мениджърът на тагове прави живота Ви по-лесен! Вече не е нужно да чакате разработчик да промени фрагменти от първа или трета страна на Вашия уебсайт, тъй като Мениджърът на тагове Ви дава изживяване без стрес, за да направите тези промени и да внедрите уебсайта си сами.",
|
1169 |
+
"WhyUsingATagManagerDetails2": "Не може да бъде по-удобно и не само Ви позволява да внасяте промени на пазара по-бързо, но и намалява разходите.",
|
1170 |
+
"WhyUsingATagManagerDetails3": "Това поддържа маркетинговите екипи, дигиталните екипи и IT екипите щастливи... Това е печелившо за всички!"
|
1171 |
},
|
1172 |
"CoreUpdater": {
|
1173 |
+
"AlreadyUpToDate": "Всичко вече е актуализирано.",
|
1174 |
+
"CheckingForPluginUpdates": "Проверка за нови актуализации на плъгини",
|
1175 |
"ClickHereToViewSqlQueries": "Кликнете тук за да видите и да копирате SQL заявките и командите в конзолата , които ще бъдат изпълнени.",
|
1176 |
+
"CloudHosting": "Хостинг в облака",
|
1177 |
+
"ConsoleCommandDescription": "Задейства надстройки. Използвайте го, след като ядрото на Matomo или други файлове на плъгини бъдат актуализирани. Добавете --yes за надстройка без потвърждение.",
|
1178 |
+
"ConsoleParameterDescription": "Директно изпълнете актуализацията, без да искате потвърждение",
|
1179 |
+
"ConsoleStartingDbUpgrade": "Започваме процеса на надграждане на базата данни сега. Това може да отнеме известно време, така че бъдете търпеливи.",
|
1180 |
+
"ConsoleUpdateFailure": "Matomo не може да бъде актуализиран! Вижте по-горе за повече информация.",
|
1181 |
+
"ConsoleUpdateNoSqlQueries": "Забележка: Няма SQL заявки или конзолни команди за изпълнение.",
|
1182 |
+
"ConsoleUpdateUnexpectedUserWarning": "Изглежда, че сте изпълнили тази актуализация с потребител %1$s, докато Вашите Matomo файлове са собственост на %2$s.\n\nЗа да сте сигурни, че файловете Matomo са четими от правилния потребител, може да се наложи да изпълните следната команда (или подобна команда в зависимост от конфигурацията на Вашия сървър):\n\n$ %3$s",
|
1183 |
+
"ConvertToUtf8mb4": "Конвертиране на база данни в UTF8mb4 набор от знаци",
|
1184 |
"CriticalErrorDuringTheUpgradeProcess": "Открита е КРИТИЧНА грешка по време на обновяването:",
|
1185 |
"DatabaseUpgradeRequired": "Необходимо е да се обнови базата от данни (БД)",
|
1186 |
+
"DbUpgradeNotExecuted": "Надстройката на базата данни не е извършена.",
|
1187 |
+
"DisablingIncompatiblePlugins": "Деактивиране на несъвместими плъгини: %s",
|
1188 |
"DownloadX": "Изтегляне %s",
|
1189 |
"DownloadingUpdateFromX": "Изтегляне на обновлението от %s",
|
1190 |
+
"DryRun": "Забележка: това е сух опит",
|
1191 |
+
"DryRunEnd": "Край на сухия опит",
|
1192 |
"EmptyDatabaseError": "Базата от данни (БД) %s е празна. Трябва да редактирате или изтриете конфигурационният файл на Matomo.",
|
1193 |
"ErrorDIYHelp": "Ако сте напреднал потребител и попаднете на грешка при обновяване на базата от данни (БД):",
|
1194 |
"ErrorDIYHelp_1": "открийте и редактирайте в конфигурационния файл (например, memory_limit или max_execution_time)",
|
1195 |
"ErrorDIYHelp_2": "изпълни останалите заявки за обновяване от това поле",
|
1196 |
"ErrorDIYHelp_3": "опцията `ръчно обновяване` на таблиците в Matomo базата от данни (БД), определяне на стойността на version_core на версията на провалилота се актуализация",
|
1197 |
"ErrorDIYHelp_4": "повторно стартирайте обновлението (чрез браузъра или от командния ред) за да продължите с останалите обновления",
|
1198 |
+
"ErrorDIYHelp_5": "изпратете този проблем и\\\/или решение на Matomo екипа, за да може продуктът да бъде подобрен",
|
1199 |
+
"ErrorDuringPluginsUpdates": "Грешка по време на актуализации на плъгини:",
|
1200 |
"ExceptionAlreadyLatestVersion": "Тази версия %s на Matomo е актуална.",
|
1201 |
"ExceptionArchiveEmpty": "Празен архив.",
|
1202 |
"ExceptionArchiveIncompatible": "Несъвместим архив: %s",
|
1203 |
"ExceptionArchiveIncomplete": "Несъвместим архив: някои файлове липсват (например %s).",
|
1204 |
+
"ExceptionDirWrongPermission": "Някои папки не позволяват записване. Моля, уверете се, че следните папки позволяват това и опитайте отново: %s.",
|
1205 |
+
"ExecuteDbUpgrade": "Изисква се надстройка на базата данни. Да се изпълни ли надстройката?",
|
1206 |
"FeedbackRequest": "Не се колебайте да споделите вашите идеи и предложения с екипа на Matomo тук:",
|
1207 |
"HelpMessageContent": "Проверете %1$s Често Задавани Въпроси (ЧЗВ) %2$s , където са обяснени възможните грешки по време на обновяването. %3$s Посъветвайте се с вашия системен администратор - те са в състояние да ви помогнат с грешка, която най-вероятно е свързана със сървъра или MySQL настройка.",
|
1208 |
"HelpMessageIntroductionWhenError": "Открита е грешка в ядрото на Matomo. Ако имате нужда от допълнителна помощ моля обърнете се към нашия форум и\/или прочетете документацията:",
|
1209 |
"HelpMessageIntroductionWhenWarning": "Актуализацията приключи успешно, но бяха открити грешки по време на процеса. Моля, прочетете документацията за допълнителна информация:",
|
1210 |
"HighTrafficPiwikServerEnableMaintenance": "Ако управлявате сървър Matomo с голям трафик, препоръчваме %1$s за момент да деактивирате проследяването на посетители и да поставите потребителския интерфейс на Matomo в режим на поддръжка %2$s.",
|
1211 |
+
"IncompatbilePluginsWillBeDisabledInfo": "Забележка: някои плъгини не са съвместими с Matomo %s. Ще ги актуализираме, ако има актуализация на Marketplace, в противен случай ще ги деактивираме, когато надстроите:",
|
1212 |
"InstallingTheLatestVersion": "Инсталиране на последната версия",
|
1213 |
+
"LatestBetaRelease": "Най-новата бета версия",
|
1214 |
+
"LatestStableRelease": "Най-новата стабилна версия",
|
1215 |
+
"LatestXBetaRelease": "Най-новата бета версия %s",
|
1216 |
+
"LatestXStableRelease": "Най-новата стабилна %s",
|
1217 |
+
"ListOfSqlQueriesFYI": "За сведение: това са SQL заявките и конзолните команди, които ще бъдат изпълнени за надграждане на Вашата база данни до Matomo %s",
|
1218 |
+
"LtsSupportVersion": "Версия за дългосрочна поддръжка",
|
1219 |
"MajorUpdateWarning1": "Това е основна актуализация! Това ще отнеме малко повече от обичайното.",
|
1220 |
"MajorUpdateWarning2": "Следният съвет е особено важен за големи инсталации.",
|
1221 |
+
"NeedHelpUpgrading": "Нуждаете се от помощ за обновяване на Matomo?",
|
1222 |
+
"NeedHelpUpgradingText": "Ако имате нужда от поддръжка, за да надстроите Вашето Matomo, създателите на Matomo са тук, за да Ви помогнат да направите надстройката на Matomo успешна и да предоставят всички инструкции, най-добри практики и текуща поддръжка. %1$sСвържете се с експертите на Matomo, за да започнете безопасното надграждане на Matomo.%2$s",
|
1223 |
"NoteForLargePiwikInstances": "Важна бележка за големи Matomo инсталации",
|
1224 |
+
"NotificationClickToUpdatePlugins": "Кликнете тук, за да обновите вашите плъгини:",
|
1225 |
+
"NotificationClickToUpdateThemes": "Кликнете тук, за да обновите Вашите теми (изглед):",
|
1226 |
"NotificationSubjectAvailableCoreUpdate": "Налична е нова Matomo версия %s",
|
1227 |
+
"NotificationSubjectAvailablePluginUpdate": "Налични актуализации за Вашите плъгини за Matomo",
|
1228 |
"PiwikHasBeenSuccessfullyUpgraded": "Matomo успешно е обновен!",
|
1229 |
"PiwikUpdatedSuccessfully": "Обновлението на Matomo завърши успешно!",
|
1230 |
"PiwikWillBeUpgradedFromVersionXToVersionY": "Matomo базата от данни (БД) ще бъде обновена от %1$s версия към %2$s.",
|
1231 |
+
"PostUpdateMessage": "Matomo винаги ще бъде безплатен за изтегляне и използване, но се нуждае от Вашата постоянна подкрепа, за да расте и да се подобрява.",
|
1232 |
+
"PostUpdateSupport": "Ако имате нужда от помощ при използването на Matomo, можете да получите подкрепа от създателите му:",
|
1233 |
"ReadyToGo": "Готови ли сте?",
|
1234 |
+
"ReceiveEmailBecauseIsSuperUser": "Получавате този имейл, защото сте супер потребител на Matomo на адрес: %s",
|
1235 |
+
"ServicesSupport": "Услуги и поддръжка",
|
1236 |
+
"SkipCacheClear": "Пропускане на изчистването на кеша.",
|
1237 |
+
"SkipCacheClearDesc": "Пропуска изчистването на кеша преди актуализиране. Това е полезно само ако можете да се уверите, че екземпляри, изпълняващи тази команда, все още не са създали кеш и ако изчистването на кеша за много акаунти в Matomo може да се превърне в пречка.",
|
1238 |
+
"ThankYouUpdatePiwik": "Благодарим Ви, че използвате Matomo и го поддържате актуален!",
|
1239 |
+
"TheFollowingDimensionsWillBeUpgradedX": "Следните размери ще бъдат актуализирани: %s.",
|
1240 |
+
"TheFollowingPluginsWillBeUpgradedX": "Следните плъгини ще бъдат актуализирани: %s.",
|
1241 |
"TheUpgradeProcessMayFailExecuteCommand": "Ако имате голяма Matomo база данни, актуализирането и може да отнеме прекалено много време, ако я стартирате през Вашият браузър. В този случай, можете да извършите актуализацията чрез команден ред: %s",
|
1242 |
"TheUpgradeProcessMayTakeAWhilePleaseBePatient": "Обновяването на базата от данни (БД) отнема известно време! Бъдете търпеливи...",
|
1243 |
+
"ThereIsNewPluginVersionAvailableForUpdate": "Някои плъгини, които използвате, са актуализирани на Marketplace:",
|
1244 |
+
"ThereIsNewVersionAvailableForUpdate": "Има нова версия на Matomo, можете да обновите",
|
1245 |
+
"TheseCommandsWillBeExecuted": "Ще бъдат изпълнени тези конзолни команди:",
|
1246 |
+
"TheseSqlQueriesWillBeExecuted": "Тези SQL заявки ще бъдат изпълнени:",
|
1247 |
+
"TriggerDatabaseConversion": "Задейства преобразуване на база данни във фонов режим",
|
1248 |
"UnpackingTheUpdate": "Разархивиране на обновлението",
|
1249 |
"UpdateAutomatically": "Обновете автоматично",
|
1250 |
+
"UpdateErrorTitle": "Грешка при актуализиране",
|
1251 |
"UpdateHasBeenCancelledExplanation": "Автоматичното обновяване на Matomo е отказано. Опитайте отново! Ако не успеете автоматично да обновите Matomo, опитайте ръчно. %1$s Моля прочетете %2$s документацията %3$s и продължете!",
|
1252 |
"UpdateLog": "Дневник на актуализациите",
|
1253 |
"UpdateSuccessTitle": "Matomo успешно е обновен!",
|
1254 |
"UpdateTitle": "Обновления",
|
1255 |
+
"UpdateUsingHttpsFailed": "Изтеглянето на най-новата версия на Matomo през защитена HTTPS връзка не беше успешно поради следната грешка:",
|
1256 |
+
"UpdateUsingHttpsFailedHelp": "Защо се провали? Изтеглянето на най-новата версия на Matomo (през защитена HTTPS връзка) може да се провали по различни причини, например поради мрежова грешка, бавна скорост на мрежата или грешна системна конфигурация. Имайте предвид, че това може също да означава, че Вашият сървър е цел на MITM атака и някой се опитва да замени актуализацията със злонамерена версия на Matomo.",
|
1257 |
+
"UpdateUsingHttpsFailedHelpWhatToDo": "Препоръчително е да опитате повторно изтеглянето, като използвате защитената HTTPS връзка, тъй като тя предотвратява MITM атаки.",
|
1258 |
+
"Updating": "Актуализиране",
|
1259 |
+
"UpdatingPluginXToVersionY": "Актуализиране на плъгин %1$s до версия %2$s",
|
1260 |
"UpgradeComplete": "Обновяването приключи!",
|
1261 |
"UpgradePiwik": "Обновете Matomo",
|
1262 |
+
"UsingHttp": "използвайки незащитената HTTP връзка",
|
1263 |
+
"UsingHttps": "използване на защитената HTTPS връзка (препоръчително)",
|
1264 |
+
"Utf8mb4ConversionHelp": "Вашата база данни в момента не използва utf8mb4 набор от знаци. Това прави невъзможно съхраняването на 4-байтови знаци, като емоджи, по-рядко срещани знаци от азиатски езици, различни исторически писмености или математически символи. Те в момента са заменени с %1$s.<br><br>Вашата база данни поддържа набора от знаци utf8mb4 и би било възможно да го конвертирате.<br><br>Ако можете да изпълнявате конзолни команди, препоръчваме да използвате тази команда: %2$s<br><br>Алтернативно можете да активирате преобразуването тук. След това ще се задейства автоматично като планирана задача на заден план.<br><br>Внимание: Преобразуването на базата данни може да отнеме до няколко часа в зависимост от размера на базата данни. Тъй като проследяването може да не работи по време на този процес, не препоръчваме да използвате тригера за по-големи инсталации.<br><br>Можете да намерите повече информация по тази тема в тези %3$sЧесто задавани въпроси%4$s.",
|
1265 |
"VerifyingUnpackedFiles": "Проверка на разархивираните файлове",
|
1266 |
+
"ViewVersionChangelog": "Вижте списъка на промените за тази версия:",
|
1267 |
"WarningMessages": "Предупредителни съобщения:",
|
1268 |
+
"WeAutomaticallyDeactivatedTheFollowingPlugins": "Автоматично деактивирахме следните плъгини: %s",
|
1269 |
"YouCanUpgradeAutomaticallyOrDownloadPackage": "Можете да обновите автоматично към версия %s или да изтеглите обновлението и инсталирате ръчно:",
|
1270 |
+
"YouMustDownloadPackageOrFixPermissions": "Matomo не може да презапише текущата Ви инсталация. Можете или да коригирате разрешенията за директория\/файл, или да изтеглите пакета и да инсталирате версия %s ръчно:",
|
1271 |
"YourDatabaseIsOutOfDate": "Базата от данни (БД) на Matomo е остаряла. Трябва да обновите преди да продължите нататък."
|
1272 |
},
|
1273 |
+
"CustomDimensions": {
|
1274 |
+
"CannotBeDeleted": "Персонализирана величина не може да бъде изтрита, а само деактивирана.",
|
1275 |
+
"ColumnAvgTimeOnDimension": "Ср. време на измерение",
|
1276 |
+
"ColumnUniqueActions": "Уникални действия",
|
1277 |
+
"ConfigureDimension": "Конфигуриране на %1$s Персонализирано измерение %2$s",
|
1278 |
+
"ConfigureNewDimension": "Конфигурирайте ново измерение",
|
1279 |
+
"CustomDimensionId": "Персонализирани размери (Id %d)",
|
1280 |
+
"CustomDimensions": "Персонализирани размери",
|
1281 |
+
"CustomDimensionsIntro": "Чрез създаване на %1$sПерсонализирани размери%2$s можете да събирате всякакви персонализирани данни за „%3$s“.",
|
1282 |
+
"CustomDimensionsIntroNext": "Matomo ще създаде отчет за всяка персонализирана величина (включително процента на реализация за всяка от Вашите цели), както и ще ви позволи лесно да сегментирате потребителите си въз основа на тези стойности. Персонализираните размери са подобни на %1$sПерсонализирани променливи%2$s, но има няколко %3$sразлики между персонализирани размери и персонализирани променливи%4$s.",
|
1283 |
+
"DimensionCreated": "Създадена е персонализирана величина",
|
1284 |
+
"DimensionUpdated": "Персонализираната величина е актуализирана",
|
1285 |
+
"EmptyValue": "празна стойност",
|
1286 |
+
"ExampleCreateCustomDimensions": "Например, за да създадете %s нови персонализирани размери в действието на обхвата, изпълнете следната команда:",
|
1287 |
+
"ExampleValue": "dimensionValue",
|
1288 |
+
"ExceptionDimensionDoesNotExist": "Измерение %1$d за уебсайт %2$d не съществува.",
|
1289 |
+
"ExceptionDimensionIsNotActive": "Измерението %1$d за уебсайт %2$d не е активно.",
|
1290 |
+
"ExtractValue": "Извличане на стойност",
|
1291 |
+
"Extractions": "Екстракции",
|
1292 |
+
"ExtractionsHelp": "Това е по избор. Редовен израз може да се използва за автоматично извличане на стойността за тази персонализирана величина от URL адрес на страница или заглавие на страница. По този начин стойността на персонализираната величина не трябва да се задава ръчно чрез клиент за проследяване. Стойност все още може да бъде зададена ръчно чрез Matomo Tracker API. Стойностите на величините, зададени ръчно при проследяване на клиенти, винаги имат предимство пред извличанията. Ако са дефинирани множество извличания, се използва първото извличане, което съвпада. Не е нужно да избягвате наклонени черти, тъй като Matomo прави това автоматично за Вас. Например, използвайте \/news\/ вместо \\\/news\\\/.",
|
1293 |
+
"HowToCreateCustomDimension": "За да създадете ново персонализирано измерение, изпълнете следната команда във Вашата инсталация на Matomo:",
|
1294 |
+
"HowToManyCreateCustomDimensions": "Ако искате да създадете няколко нови персонализирани величини наведнъж, просто добавете броя на величините, които ще бъдат създадени. Тъй като всички промени в базата данни ще бъдат изпълнени в един израз, може да не отнеме много повече време за добавяне на няколко персонализирани измерения наведнъж.",
|
1295 |
+
"HowToTrackManuallyTitle": "Ръчно проследяване на стойност за тази величина",
|
1296 |
+
"HowToTrackManuallyViaHttp": "За да проследявате стойност чрез API на HTTP Tracker, използвайте проследяващия параметър „dimension“, последван от идентификатора на персонализираната величина:",
|
1297 |
+
"HowToTrackManuallyViaJs": "За да проследите стойност в извикването на JavaScript Tracker:",
|
1298 |
+
"HowToTrackManuallyViaJsDetails": "За повече информация прочетете ръководството за %1$sJavaScript Tracker за персонализирани размери%2$s",
|
1299 |
+
"HowToTrackManuallyViaPhp": "За да проследите стойност в извикването на PHP Tracker:",
|
1300 |
+
"IncreaseAvailableCustomDimensionsTakesLong": "Създаването на нова персонализирана величина може да отнеме много време в зависимост от размера на Вашата база данни, тъй като изисква промени в схемата в нея. Следователно това е възможно да се направи само чрез конзолна команда, която трябва да се изпълни на командния ред.",
|
1301 |
+
"IncreaseAvailableCustomDimensionsTitle": "Увеличете броя на наличните персонализирани величини",
|
1302 |
+
"NameAllowedCharacters": "Разрешените знаци са всякакви букви, цифри, интервали, тире и подчертаване.",
|
1303 |
+
"NameIsRequired": "Изисква се име.",
|
1304 |
+
"NameIsTooLong": "Името съдържа твърде много знаци, използвайте до %d знака.",
|
1305 |
+
"NoCustomDimensionConfigured": "Все още няма конфигурирана персонализирана величина, конфигурирайте я сега.",
|
1306 |
+
"NoValue": "без стойност",
|
1307 |
+
"PageUrlParam": "Параметър на URL адреса на страницата",
|
1308 |
+
"PluginDescription": "Разширете Matomo към Вашите нужди, като дефинирате и проследявате персонализирани размери в обхват Действие или Посещение",
|
1309 |
+
"ScopeDescriptionAction": "Персонализираните величини в обхвата „Действие“ могат да се изпращат заедно с всяко действие (преглеждане на страница, изтегляне, събитие и т.н.).",
|
1310 |
+
"ScopeDescriptionActionMoreInfo": "Екстракциите могат да бъдат дефинирани така, че стойността на персонализираната величина да бъде извлечена от URL адреса на страницата, заглавието на страницата или параметъра на заявка за URL адрес на страница.",
|
1311 |
+
"ScopeDescriptionVisit": "Персонализираните размери в обхвата „Посещение“ могат да се изпращат заедно с всяка заявка за проследяване и се съхраняват в посещението.",
|
1312 |
+
"ScopeDescriptionVisitMoreInfo": "Ако зададете различни стойности за дадена величина през целия живот на посещението, ще се използва последната зададена стойност.",
|
1313 |
+
"UrlQueryStringParameter": "параметър на низ на заявка за URL адрес",
|
1314 |
+
"XofYLeft": "%1$s от %2$s размери са останали"
|
1315 |
+
},
|
1316 |
+
"CustomJsTracker": {
|
1317 |
+
"DiagnosticPiwikJsMakeWritable": "Препоръчваме да направите %1$s достъпен за запис, като изпълните тази команда: %2$s",
|
1318 |
+
"DiagnosticPiwikJsNotWritable": "Файлът за проследяване на Matomo JavaScript %s не е записваем, което означава, че други плъгини не могат да разширят JavaScript тракера. В бъдеще дори някои основни функции може да не работят според очакванията.",
|
1319 |
+
"DiagnosticPiwikJsWritable": "Записваем JavaScript тракер (%s)",
|
1320 |
+
"PluginDescription": "Позволява на всеки плъгин да разшири JavaScript файла за проследяване на Matomo (matomo.js) и да добави нова функционалност и възможности за анализ на уебсайтове."
|
1321 |
+
},
|
1322 |
"DBStats": {
|
|
|
|
|
1323 |
"DBSize": "Размер на БД",
|
1324 |
+
"DataSize": "Данни (размер)",
|
1325 |
+
"DatabaseUsage": "Натоварване на БД",
|
1326 |
"EstimatedSize": "Ориентировъчен размер",
|
1327 |
"IndexSize": "Индекс (размер)",
|
1328 |
"LearnMore": "За да научите повече за това как Matomo обработва данни и колко добре работи за среден и висок трафик на уеб сайтове, проверете документацията %s.",
|
1330 |
"MetricDataByYear": "Метрични таблици за година",
|
1331 |
"MetricTables": "Метрични таблици",
|
1332 |
"OtherTables": "Други таблици",
|
1333 |
+
"PluginDescription": "Предоставя подробни отчети за използване на базата данни на MySQL. Предлага се за супер потребители под „Диагностика“.",
|
1334 |
"ReportDataByYear": "Годишен доклад на таблици",
|
1335 |
"ReportTables": "Докладни таблици",
|
1336 |
"RowCount": "Брой редове",
|
1339 |
"TrackerTables": "Таблици на тракера"
|
1340 |
},
|
1341 |
"Dashboard": {
|
1342 |
+
"AddAWidget": "Добави нов уиджет",
|
1343 |
+
"AddPreviewedWidget": "Добави уиджета на таблото",
|
1344 |
"ChangeDashboardLayout": "Сменете изледа на таблото",
|
1345 |
"CopyDashboardToUser": "Копиране на табло при потребител",
|
1346 |
"CreateNewDashboard": "Направете ново табло",
|
1347 |
"Dashboard": "Табло",
|
1348 |
+
"DashboardCategoryHelp": "Това е страница на таблото. Таблата за управление са колекция от уиджети на Matomo, които добавяте сами, за да отговарят на Вашите специфични нужди. Смесете и съпоставете които и да е от уиджетите на Matomo, за да получите данните %1$s*, от които*%2$s се нуждаете с един поглед.",
|
1349 |
"DashboardCopied": "Настоящото табло е успешно копирано при избрания потребител.",
|
1350 |
"DashboardEmptyNotification": "Вашето табло не съдържа никакви джаджи. Започнете с добавяне на някои джаджи или просто нулирайте таблото, за да изберете джаджите по подразбиране.",
|
1351 |
"DashboardName": "Име на табло:",
|
1352 |
"DashboardOf": "Табло за %s",
|
1353 |
+
"DefaultDashboard": "Табло по подразбиране - Използвайте уиджетите по подразбиране и изгледа на колоните",
|
1354 |
+
"DeleteWidgetConfirm": "Наистина ли искате да изтриете този уиджет от таблото?",
|
1355 |
"EmptyDashboard": "Изпразнете таблото - Изберете любимите си джаджи",
|
1356 |
+
"LoadingWidget": "Зарежда уиджета, почакайте...",
|
1357 |
"ManageDashboard": "Управлявате таблото",
|
1358 |
"Maximise": "Максимизиране",
|
1359 |
"Minimise": "Минимизиране",
|
1360 |
+
"NotUndo": "Вие няма да можете да отмените тази операция.",
|
1361 |
"PluginDescription": "Вашето табло за уеб анализи. Настройте вашия панел добавяйки нови джаджи, които можете да ги влачите, също така променяйки оформлението на колоните. Всеки потребител поотделно може да настрои своето табло.",
|
1362 |
"RemoveDashboard": "Премахнете таблото",
|
1363 |
"RemoveDashboardConfirm": "Сигурни ли сте че искате да премахнете таблото \"%s\"?",
|
1364 |
+
"RemoveDefaultDashboardNotPossible": "Таблото по подразбиране не може да бъде премахнато",
|
1365 |
"RenameDashboard": "Сменете името на таблото",
|
1366 |
"ResetDashboard": "Зареди отново таблото",
|
1367 |
"ResetDashboardConfirm": "Сигурен ли сте че искате да заредите отново плана на таблото с избраните по подразбиране джаджи?",
|
1368 |
"SelectDashboardLayout": "Моля, изберете Вашият нов изглед на табло",
|
1369 |
+
"SelectWidget": "Изберете уиджет, който да добавите на таблото",
|
1370 |
"SetAsDefaultWidgets": "Поставете по подразбиране избора на джаджи",
|
1371 |
"SetAsDefaultWidgetsConfirm": "Сигурни ли сте, че искате да настроите настоящата селекция на джаджи и оформление на таблото по подразбиране?",
|
1372 |
"SetAsDefaultWidgetsConfirmHelp": "Селекцията на джаджи и колоните на изгледа на таблото ще бъдат използвани, когато потребителят създаде ново табло, или когато \"%s\" функция е използвана.",
|
1373 |
"TopLinkTooltip": "Вижте доклада за уеб анализи за %s.",
|
1374 |
+
"WidgetNotFound": "Несъществуващ уиджет",
|
1375 |
+
"WidgetPreview": "Преглед на уиджета"
|
1376 |
},
|
1377 |
"DevicePlugins": {
|
1378 |
+
"BrowserWithNoPluginsEnabled": "%1$s без активирани плъгини",
|
1379 |
+
"BrowserWithPluginsEnabled": "%1$s с активирани плъгини %2$s",
|
1380 |
+
"PluginDescription": "Отчита списъка с плъгини, които се поддържат в браузърите на посетителите.",
|
1381 |
+
"PluginDetectionDoesNotWorkInIE": "Забележка: Откриването на плъгини не работи в Internet Explorer преди версия 11. Този отчет се базира само на браузъри, различни от IE, и по-нови версии на IE.",
|
1382 |
+
"WidgetPlugins": "Плъгини за браузър",
|
1383 |
+
"WidgetPluginsDocumentation": "Този отчет показва кои плъгини за браузъри са активирали Вашите посетители. Тази информация може да е важна за избора на правилния начин за предоставяне на Вашето съдържание."
|
1384 |
},
|
1385 |
"DevicesDetection": {
|
1386 |
+
"BotDetected": "Този потребителски агент е разпознат като %1$s. Посещенията с този потребителски агент няма да се проследяват в Matomo по подразбиране.",
|
1387 |
+
"BrowserCode": "Код на браузъра",
|
1388 |
"BrowserEngine": "Браузър и версия",
|
1389 |
"BrowserEngineDocumentation": "Тази таблица показва браузърите на вашите потребители ,разделени по фамилии. %s Най-важната информация за уеб разработчиците е какъв тип технология за обработка са използвали посетителите. Етикета показва имената на технологиите, следвани от браузера, който е бил използван, поставен в скоби.",
|
1390 |
+
"BrowserEngines": "Браузърни енджини",
|
1391 |
"BrowserFamily": "Фамилия браузъри",
|
|
|
1392 |
"BrowserVersion": "Версия на браузъра",
|
1393 |
"BrowserVersions": "Версии на браузъра",
|
1394 |
+
"Browsers": "Браузъри",
|
1395 |
"Camera": "Камера",
|
1396 |
"CarBrowser": "Браузър, който се използва в кола",
|
1397 |
+
"ClientType": "Тип клиент",
|
1398 |
+
"ClientTypes": "Типове клиенти",
|
1399 |
"ColumnBrowser": "Браузър и версия",
|
1400 |
"ColumnOperatingSystem": "Операционна система и версия",
|
1401 |
+
"ColumnOperatingSystemVersion": "Версия на операционната система",
|
1402 |
"Console": "Конзола",
|
|
|
|
|
|
|
|
|
1403 |
"Device": "Устройство",
|
1404 |
"DeviceBrand": "Марка на устройството",
|
1405 |
+
"DeviceBrandReportDocumentation": "Този отчет показва марките\/производителите на устройствата, които посетителите Ви са използвали. В повечето случаи тази информация е достъпна само за устройства, които не са настолни компютри.",
|
1406 |
+
"DeviceBrands": "Марки на устройства",
|
1407 |
"DeviceDetection": "Определяне на устройство",
|
1408 |
"DeviceModel": "Модел на устройството",
|
1409 |
+
"DeviceModelReportDocumentation": "Този отчет показва устройствата, които посетителите Ви използват. Всеки модел се показва в комбинация с марката на устройството, тъй като някои имена на модели се използват от множество марки.",
|
1410 |
+
"DeviceModels": "Модели на устройства",
|
1411 |
"DeviceType": "Вид устройство",
|
1412 |
+
"DeviceTypeReportDocumentation": "Този отчет показва типовете устройства, които посетителите Ви са използвали. Този отчет винаги ще показва всички типове устройства, които Matomo може да открие, дори ако няма посещения с конкретен тип.",
|
1413 |
+
"DeviceTypes": "Типове устройства",
|
1414 |
+
"Devices": "Устройства",
|
1415 |
+
"DevicesDetection": "Устройства, които използва посетителят",
|
1416 |
+
"FeaturePhone": "Несмарт телефон",
|
1417 |
+
"FeedReader": "Четец на емисии",
|
1418 |
+
"GenericDevice": "Общо %s",
|
1419 |
+
"Library": "Библиотека",
|
1420 |
+
"MediaPlayer": "Медиен плейър",
|
1421 |
+
"MobileApp": "Мобилно приложение",
|
1422 |
+
"MobileDevice": "Мобилно устройство",
|
1423 |
+
"OperatingSystemCode": "Код на операционната система",
|
1424 |
"OperatingSystemFamilies": "Вид операционна система",
|
1425 |
+
"OperatingSystemFamiliesReportDocumentation": "Този отчет Ви показва операционните системи, които посетителите Ви използват, групирани по семейство операционни системи. Семейството операционни системи се състои от различни версии или дистрибуции.",
|
1426 |
"OperatingSystemFamily": "Семейство на оперативната система",
|
|
|
1427 |
"OperatingSystemVersions": "Версия на операционната система",
|
1428 |
+
"OperatingSystemVersionsReportDocumentation": "Този отчет Ви показва операционните системи, които използват Вашите посетители. Всяка версия и дистрибуция се показват отделно.",
|
1429 |
+
"OperatingSystems": "Операционни системи",
|
1430 |
+
"Peripheral": "Периферно устройство",
|
1431 |
+
"Phablet": "Фаблет",
|
1432 |
+
"Pim": "PIM",
|
1433 |
+
"PluginDescription": "Предоставя разширена информация за потребителски устройства, като марка (производител), модел (версия на устройството), тип устройство (телевизор, конзоли, смартфони, настолни компютри и др.) и др.",
|
1434 |
+
"PortableMediaPlayer": "Преносим медиен плейър",
|
1435 |
"SmartDisplay": "„Умен“ дисплей",
|
1436 |
+
"SmartSpeaker": "Смарт говорител",
|
1437 |
"Smartphone": "Смартфон",
|
1438 |
+
"Software": "Софтуер",
|
|
|
1439 |
"TV": "ТВ",
|
1440 |
+
"Tablet": "Таблет",
|
1441 |
+
"UserAgent": "Потребителски агент",
|
1442 |
+
"Wearable": "Устройство за носене (часовник, гривна и т.н.)",
|
1443 |
+
"WidgetBrowserVersionsDocumentation": "Този отчет показва информация, за това какъв браузър са използвали вашите потребители. Всеки браузер е показан поотделно.",
|
1444 |
"WidgetBrowsers": "Браузъри на посетителите",
|
1445 |
+
"WidgetBrowsersDocumentation": "Този отчет съдържа информация за това какъв тип браузър са използвали Вашите посетители.",
|
1446 |
+
"XVisitsFromDevices": "%1$s посещения от %2$s устройства",
|
1447 |
+
"dataTableLabelBrands": "Марка",
|
1448 |
+
"dataTableLabelModels": "Модел",
|
1449 |
+
"dataTableLabelSystemVersion": "Версия на операционната система",
|
1450 |
+
"dataTableLabelTypes": "Тип"
|
1451 |
+
},
|
1452 |
+
"Diagnostics": {
|
1453 |
+
"AllPrivateDirectoriesAreInaccessible": "Всички частни директории са недостъпни от интернет.",
|
1454 |
+
"BrowserAndAutoArchivingEnabledComment": "Изглежда, че както браузърът, така и автоматичното архивиране са активирани. Автоматичното архивиране последно стартира преди %3$s. Ако %1$sавтоматично архивиране%2$s е активирано, трябва да деактивирате архивирането на браузъра в „Общи настройки“.",
|
1455 |
+
"BrowserAndAutoArchivingEnabledLabel": "Браузърът и автоматичното архивиране са активирани",
|
1456 |
+
"BrowserTriggeredArchivingEnabled": "За оптимална производителност и бързо Matomo, силно се препоръчва да настроите crontab за автоматично архивиране на Вашите отчети и да деактивирате задействането на браузъра в настройките на Matomo. %1$sНаучете повече.%2$s",
|
1457 |
+
"ConfigFileIntroduction": "Тук можете да видите конфигурацията на Matomo. Ако използвате Matomo в среда с балансирано натоварване, страницата може да е различна в зависимост от това от кой сървър е заредена тази страница. Редове с различен цвят на фона са променени конфигурационни стойности, които са посочени например във файла %1$s.",
|
1458 |
+
"ConfigFileTitle": "Конфигурационен файл",
|
1459 |
+
"ConfigIniAccessible": "Открихме също, че конфигурационната директория на Matomo е публично достъпна. Въпреки че хакери не могат да прочетат конфигурацията сега, ако Вашият уеб сървър спре да изпълнява PHP файлове по някаква причина, Вашите идентификационни данни за MySQL и друга информация ще бъдат достъпни за всеки. Моля, проверете конфигурацията на Вашия уеб сървър и откажете достъп до тази директория.",
|
1460 |
+
"CronArchivingHasNotRun": "Архивирането все още не е извършено успешно.",
|
1461 |
+
"CronArchivingHasNotRunInAWhile": "Архивирането за последно беше успешно на %1$s, което беше преди %2$s.",
|
1462 |
+
"CronArchivingLastRunCheck": "Последно успешно завършване на архивирането",
|
1463 |
+
"CronArchivingRanSuccessfullyXAgo": "Процесът на архивиране завърши успешно преди %1$s.",
|
1464 |
+
"CronArchivingRunDetails": "Моля, проверете дали сте настроили crontab, извикващ конзолната команда %1$s, и дали сте конфигурирали %2$s да получава грешки по имейл, ако архивирането не успее. Можете също да опитате да изпълните конзолната команда, за да архивирате отчетите си ръчно: %3$s. %4$sНаучете повече.%5$s",
|
1465 |
+
"DatabaseReaderConnection": "Връзка с четец на база данни",
|
1466 |
+
"DatabaseUtf8Requirement": "Това е необходимо, за да може да се съхраняват 4-байтови UTF8 знаци. Освен ако utf8mb4 не е налично, специални знаци като емоджи, по-рядко срещани знаци на азиатски езици, различни исторически писмености или математически символи, ще бъдат заменени с %1$s. Можете да прочетете повече подробности по тази тема в %2$s тези ЧЗВ%3$s.",
|
1467 |
+
"DatabaseUtf8mb4CharsetAvailableButNotUsed": "Вашата база данни поддържа utf8mb4 charset, но таблиците на Вашата база данни все още не са преобразувани. Можете да направите това, като изпълните командата %1$s или активирате автоматичното преобразуване в Общи настройки.",
|
1468 |
+
"DatabaseUtf8mb4CharsetRecommended": "Вашата база данни все още не поддържа utf8mb4 набор от знаци.",
|
1469 |
+
"EnableRequiredDirectoriesDiagnostic": "Тази проверка беше пропусната, тъй като тази проверка е забранена в конфигурацията. За да активирате тази проверка, задайте [General] enable_required_directories_diagnostic = 1 във файла \"config\/config.ini.php\".",
|
1470 |
+
"HideUnchanged": "Ако искате да видите само променени стойности, можете %1$s да скриете всички непроменени стойности %2$s.",
|
1471 |
+
"HtaccessWarningNginx": "За да се гарантира, че чувствителните файлове няма да бъдат достъпни директно, се препоръчва да конфигурирате Вашия уеб сървър да ограничи достъпа до определени директории. За повече информация, моля, вижте %1$s официалната конфигурация на сървъра nginx %2$s",
|
1472 |
+
"MysqlMaxPacketSize": "Максимален размер на пакета",
|
1473 |
+
"MysqlMaxPacketSizeWarning": "Препоръчително е да конфигурирате размер на 'max_allowed_packet' във Вашата MySQL база данни от поне %1$s. В момента е конфигуриран %2$s.",
|
1474 |
+
"MysqlTemporaryTablesWarning": "За правилното функциониране на Matomo е необходимо разрешение в MySQL за CREATE TEMPORARY TABLES.",
|
1475 |
+
"MysqlTransactionLevel": "Промяната на нивото на изолация на транзакциите не се поддържа. Архивирането ще продължи да работи, но може да е по-бавно и се препоръчва да промените например `binlog_format` на `row`, ако е възможно.",
|
1476 |
+
"NoDataForReportArchivingNotRun": "Архивирането на отчетите Ви не е изпълнявано наскоро, %1$sнаучете повече за това как да генерирате отчетите си.%2$s",
|
1477 |
+
"PHPFPMWarningApache": "PHP FPM ще игнорира правилата на .htaccess за .php файлове. За да се гарантира, че чувствителните файлове няма да бъдат достъпни директно, се препоръчва да изключите определени директории от обработване от PHP FPM, като добавите реда %1$s към секцията %2$s във Вашата конфигурация на виртуален хост на apache точно над реда %3$s.",
|
1478 |
+
"PHPFPMWarningGeneric": "PHP FPM може да игнорира правилата на .htaccess за .php файлове. За да се гарантира, че чувствителните файлове не могат да бъдат достъпни директно, се препоръчва да конфигурирате Вашия уеб сървър да изключи директорията \/config от обработване от PHP FPM.",
|
1479 |
+
"PHPFPMWarningNginx": "PHP FPM ще игнорира правилата на .htaccess за .php файлове. За да се гарантира, че чувствителните файлове няма да бъдат достъпни директно, се препоръчва да се изключат определени директории от обработване от PHP FPM. За повече информация, моля, вижте %1$s официалната конфигурация на сървъра nginx %2$s",
|
1480 |
+
"PrivateDirectoryInternetDisabled": "Не можахме да проверим дали следните URL адреси са достъпни, защото интернет функциите са деактивирани на това Matomo.",
|
1481 |
+
"PrivateDirectoryIsAccessible": "Открихме, че горните URL адреси са достъпни през браузъра, но НЕ трябва да бъдат. Разрешаването на достъпа до тях може да представлява потенциален риск за сигурността, тъй като съдържанието може да предостави информация за Вашия сървър и потенциално Вашите потребители. Моля, ограничете достъпа до тях.",
|
1482 |
+
"PrivateDirectoryManualCheck": "Моля, отворете URL адресите ръчно в браузър, за да видите дали имате достъп до тях. Ако можете, може да се наложи да промените конфигурацията на Вашия сървър, тъй като тези файлове\/директории не трябва да са достъпни чрез браузър от интернет или интранет.",
|
1483 |
+
"RecommendedPrivateDirectories": "Препоръчани частни директории",
|
1484 |
+
"RequiredPrivateDirectories": "Задължителни частни директории",
|
1485 |
+
"Sections": "Секции",
|
1486 |
+
"UrlsAccessibleViaBrowser": "Открихме, че горните URL адреси са достъпни през браузъра, но препоръчваме да не са. Ако е възможно, ограничете достъпа до тях."
|
1487 |
},
|
1488 |
"Ecommerce": {
|
1489 |
+
"EcommerceLogSubcategoryHelp1": "Логът на Ecommerce предоставя подробни данни на ниво сесия, така че можете да разгледате пълната сесия за всеки потребител, който е направил покупка или е изоставил кошницата си. Това може да Ви помогне да разберете какво правят потребителите преди и след покупка, за да разкрият възможности за оптимизация.",
|
1490 |
+
"EcommerceLogSubcategoryHelp2": "Данните на тази страница се актуализират в реално време.",
|
1491 |
+
"EcommerceOverviewSubcategoryHelp1": "Разделът с преглед на Ecommerce е най-доброто място да получите преглед на високо ниво за представянето на Вашия онлайн магазин. С един поглед можете да видите колко продажби правите, колко приходи генерирате и процента на реализация на Вашия уебсайт.",
|
1492 |
+
"EcommerceOverviewSubcategoryHelp2": "Кликнете върху отделен показател в диаграмата на спарклайн, за да се съсредоточите върху него в рамките на графиката на еволюцията в пълен размер.",
|
1493 |
+
"EcommerceOverviewSubcategoryHelp3": "Научете повече в нашето ръководство за Ecommerce тук.",
|
1494 |
+
"LifeTimeValue": "Стойност на жизнения цикъл на Ecommerce",
|
1495 |
+
"LifeTimeValueDescription": "Общите приходи от Ecommerce, приписани на този клиент за всички посещения: сумата от приходите от всички поръчки от Ecommerce за идентификатор на посетителя %s.",
|
1496 |
+
"NumberOfItems": "Брой артикули в кошницата",
|
1497 |
+
"Order": "Поръчка",
|
1498 |
+
"OrderId": "ID на поръчка",
|
1499 |
+
"OrderRevenue": "Приходи от поръчки",
|
1500 |
+
"OrderValue": "Стойност на поръчката",
|
1501 |
+
"Orders": "Поръчки",
|
1502 |
+
"PluginDescription": "Ecommerce позволява да проследите добавянето на продукти в пазарската кошница от страна на потребителите и кога се осъществява Ecommerce продажба. Също могат да се следят продукти, продуктови категории и незавършени пазарски кошници.",
|
1503 |
+
"ProductSubcategoryHelp": "Изгледът на продукти може да Ви помогне да идентифицирате продукти и категории, които са с по-висока или по-ниска ефективност, за да разкрие тенденции и възможности, свързани с избора на продукти и страниците на магазина Ви.",
|
1504 |
+
"RevenueLeftInCart": "Приходи, оставени в кошницата",
|
1505 |
+
"Sales": "Продажби",
|
1506 |
+
"SalesAdjective": "Продажби %s",
|
1507 |
+
"SalesBy": "Продажби от %s",
|
1508 |
+
"SalesSubcategoryHelp1": "Този раздел съдържа обширна колекция от отчети, които да Ви помогнат да анализирате различните условия, които най-често водят до продажби, като например трафик и източници на кампании, потребителско време и местоположение и устройства, използвани за достъп до тях.",
|
1509 |
+
"SalesSubcategoryHelp2": "Можете също така да научите как точно приходите са свързани с всяка величина, като например конкретни типове трафик или проследявани кампании.",
|
1510 |
+
"ViewedProductCategory": "Разгледана продуктова категория",
|
1511 |
+
"ViewedProductName": "Прегледано име на продукт",
|
1512 |
+
"ViewedProductPrice": "Цена на разгледан продукт",
|
1513 |
+
"ViewedProductSKU": "Разгледан SKU на продукта",
|
1514 |
+
"VisitorProfileAbandonedCartSummary": "Изоставени %1$s кошници, включително %2$s артикули на обща стойност %3$s.",
|
1515 |
+
"VisitorProfileItemsAndOrders": "Закупени %1$s артикули в %2$s поръчки за Ecommerce.",
|
1516 |
+
"VisitorProfileLTV": "Генерирани приходи за цял период от %1$s."
|
1517 |
},
|
1518 |
"Events": {
|
1519 |
+
"AvgEventValue": "Средната стойност на събитието е: %s",
|
1520 |
"AvgValue": "Средна стойност",
|
1521 |
+
"AvgValueDocumentation": "Средната стойност на всички стойности за това събитие",
|
1522 |
+
"Category": "Категория",
|
1523 |
"Event": "Събитие",
|
1524 |
"EventAction": "Действие на събитието",
|
1525 |
+
"EventActions": "Действия на събитието",
|
1526 |
+
"EventActionsReportDocumentation": "Този отчет Ви показва колко пъти се е случило всяко действие за събитие. Можете да видите категориите и имената на събитията, които са били проследени заедно с всяко действие на събитието в подтаблицата на реда. Можете да промените кое се показва, като промените вторичното измерение с връзката в долната част на отчета.",
|
1527 |
+
"EventCategories": "Категории на събитията",
|
1528 |
+
"EventCategoriesReportDocumentation": "Този отчет показва категориите на всяко проследявано събитие и колко пъти са се случили. Можете да видите действията и имената на събитията, които са били проследени заедно с всяка категория събития в подтаблицата на всеки ред. Можете да промените кое се показва, като промените вторичното измерение с връзката в долната част на отчета.",
|
1529 |
"EventCategory": "Категория на събитие",
|
1530 |
"EventName": "Име на събитие",
|
1531 |
+
"EventNames": "Имена на събития",
|
1532 |
+
"EventNamesReportDocumentation": "Този отчет Ви показва имената, свързани с всяко проследявано събитие и колко пъти са се случили. Можете да видите действията и категориите на събитията, които са били проследени заедно с всяко име на събитие в подтаблицата на всеки ред. Можете да промените кое се показва, като промените вторичното измерение с връзката в долната част на отчета.",
|
1533 |
+
"EventUrl": "URL адрес на събитието",
|
1534 |
+
"EventUrls": "URL адреси на събития",
|
1535 |
+
"EventValue": "Стойност на събитието",
|
1536 |
+
"EventValueTooltip": "Общата стойност на събитието е сумата от стойностите на събитията %1$s %2$s между минимум %3$s и максимум %4$s.",
|
1537 |
"Events": "Събития",
|
1538 |
+
"EventsSubcategoryHelp1": "Разделът Събития предлага отчети за персонализираните събития, свързани с Вашия сайт. Събитията обикновено изискват персонализирана конфигурация. След като конфигурирате, можете да преглеждате отчетите, разбити по категория, действие и име.",
|
1539 |
+
"EventsSubcategoryHelp2": "Научете повече за проследяването на събития тук.",
|
1540 |
+
"EventsWithValue": "Събития със стойност",
|
1541 |
+
"EventsWithValueDocumentation": "Брой събития, при които е зададена стойност за събитие",
|
1542 |
+
"MaxValue": "Максимална стойност на събитието",
|
1543 |
"MaxValueDocumentation": "Максималната стойност за това събитие",
|
1544 |
+
"MinValue": "Минимална стойност на събитието",
|
1545 |
"MinValueDocumentation": "Минималната стойност за това събитие",
|
1546 |
+
"PluginDescription": "Проследи събития и получи отчети за действията на посетителите.",
|
1547 |
"SecondaryDimension": "Второстепенното измерение е %s.",
|
1548 |
"SwitchToSecondaryDimension": "Превключване към %s",
|
1549 |
"TopEvents": "Най-важните събития",
|
1550 |
"TotalEvents": "Общо събития",
|
1551 |
"TotalEventsDocumentation": "Общ брой събития",
|
1552 |
+
"TotalValue": "Стойност на събитието",
|
1553 |
"TotalValueDocumentation": "Сумата от стойностите за събитие",
|
1554 |
"ViewEvents": "Преглед на събития"
|
1555 |
},
|
1556 |
"Feedback": {
|
1557 |
+
"AppreciateFeedback": "Ние наистина оценяваме Вашата обратна връзка",
|
1558 |
+
"CommunityHelp": "Помощ от общността",
|
1559 |
+
"ContactUs": "Свържете се с нас",
|
1560 |
"DoYouHaveBugReportOrFeatureRequest": "Желаете да докладвате за грешка или имате предложение?",
|
1561 |
+
"FAQs": "Често задавани въпроси",
|
1562 |
+
"FeedbackSubtitle": "Ето Вашия шанс да го поискате! Моля, опишете възможно най-подробно. <br> Вашите отзиви ще ни помогнат да подобрим Matomo. %1$s",
|
1563 |
+
"FeedbackTitle": "Моля, помогнете ни да подобрим Matomo",
|
1564 |
+
"FormNotEnoughFeedbackText": "Моля, не забравяйте да споделите отзивите си по-долу.",
|
1565 |
+
"Forums": "Форуми",
|
1566 |
+
"HowCanWeHelp": "Как можем да помогнем?",
|
1567 |
+
"HowToCreateTicket": "Моля, прочетете препоръките за писане на добър %1$sдоклад за грешки %2$s или %3$sзаявка за функция %4$s. След това се регистрирайте или влезте в %5$sнашото проследяване на проблеми%6$s и създайте %7$sнова заявка за проблем%8$s.",
|
1568 |
"IWantTo": "Желая да:",
|
1569 |
"LearnWaysToParticipate": "Научете повече за начините, как бихте могли да %1$sучаствате%2$s",
|
1570 |
"ManuallySendEmailTo": "Моля изпратете ръчно Вашето съобщение до",
|
1571 |
+
"MessageBodyValidationError": "Текстът на съобщението е твърде кратък (минимум 10 знака).",
|
1572 |
+
"NeverAskMeAgain": "Никога повече не ме питай",
|
1573 |
+
"NotTrackingVisits": "Matomo не проследява посещенията",
|
1574 |
+
"PleaseLeaveExternalReviewForMatomo": "Ние наистина оценяваме Вашите отзиви. Ако имате малко време, моля, споделете мислите си на някой от тези сайтове и вдъхновете други да се присъединят към нашата революция в данните.",
|
1575 |
+
"PluginDescription": "Изпратете Вашите отзиви до екипа на Matomo. Споделете Вашите идеи и предложения, за да направите Matomo най-добрата платформа за анализ в света!",
|
1576 |
+
"Policy": "Вашето съобщение и Вашият имейл адрес ще ни бъдат изпратени чрез изпращане на този формуляр. Информацията ще бъде използвана само за подобряване на нашите продукти и услуги. Вашите данни ще бъдат обработвани от нас, нашия хостинг доставчик и нашия доставчик на тикети за поддръжка. За повече информация вижте %1$sДекларацията за поверителност на Matomo%2$s.",
|
1577 |
+
"PopularHelpTopics": "Популярни помощни теми",
|
1578 |
+
"PrivacyClaim": "Matomo уважава Вашата %1$sповерителност%2$s и Ви дава пълен контрол върху Вашите данни.",
|
1579 |
+
"ProfessionalHelp": "Професионална помощ",
|
1580 |
+
"ProfessionalServicesDedicatedSupport": "Подкрепа от ангажиран член на екипа на Matomo на всяка стъпка от пътя",
|
1581 |
+
"ProfessionalServicesEmailAlerts": "Имейл известия за версии, свързани със сигурността на Matomo",
|
1582 |
+
"ProfessionalServicesIntro": "С абонамент за поддръжка на Matomo на Ваш хост позволявате на нашия опитен екип да Ви помогне онлайн да използвате Matomo Analytics за разрастване на Вашия бизнес.",
|
1583 |
+
"ProfessionalServicesOfferIntro": "От какви услуги можете да се възползвате?",
|
1584 |
+
"ProfessionalServicesOnboarding": "Въпросник за включване и среща с член на поддръжката на Matomo",
|
1585 |
+
"ProfessionalServicesSupport": "24\/7 онлайн услуга за заявки",
|
1586 |
+
"ProfessionalServicesTraining": "Ексклузивен достъп до видеоклипове за обучение на Matomo",
|
1587 |
+
"PurgeOldData": "Искам да премахна някои стари данни",
|
1588 |
+
"Question0": "Кои са най-големите Ви проблеми или проблемни точки с Matomo и защо?",
|
1589 |
+
"Question1": "Кое е единственото нещо, което бихте искали да видите подобрено в Matomo и защо?",
|
1590 |
+
"Question2": "Коя е функцията, която Ви липсва най-много в Matomo и защо?",
|
1591 |
+
"Question3": "Каква е основната Ви цел да използвате Matomo?",
|
1592 |
+
"Question4": "Каква е основната Ви грижа по отношение на Matomo?",
|
1593 |
+
"RateFeatureConfigurable": "Конфигурируем",
|
1594 |
+
"RateFeatureDislikeAddMissingFeatures": "Добавете липсващи функции",
|
1595 |
+
"RateFeatureDislikeFixBugs": "Поправете грешки",
|
1596 |
+
"RateFeatureDislikeMakeEasier": "Направете го по-лесен за използване",
|
1597 |
+
"RateFeatureDislikeSpeedUp": "Подобрете скоростта",
|
1598 |
+
"RateFeatureEasyToUse": "Лесен за използване",
|
1599 |
+
"RateFeatureLeaveMessageDislike": "Как можем да подобрим тази функция?",
|
1600 |
+
"RateFeatureLeaveMessageDislikeExtra": "Моля, уведомете ни за това как можем да се справим по-добре, за да можем да подобрим Matomo.",
|
1601 |
+
"RateFeatureLeaveMessageDislikeExtraBugs": "Съжаляваме, че срещнахте проблеми, моля, уведомете ни за това, което не работи.",
|
1602 |
+
"RateFeatureLeaveMessageDislikeExtraEasier": "Имаше ли конкретна част от тази функционалност, която Ви се стори трудна за използване?",
|
1603 |
+
"RateFeatureLeaveMessageDislikeExtraMissing": "Кои функционалности Ви липсват?",
|
1604 |
+
"RateFeatureLeaveMessageDislikeExtraSpeed": "Бихте ли посочили колко бавна е тази функционалност за Вас? Бихте ли споделили колко посещения на месец обикновено отчитате?",
|
1605 |
+
"RateFeatureLeaveMessageDislikeNamedFeature": "Как можем да подобрим %1$s?",
|
1606 |
+
"RateFeatureLeaveMessageLike": "Какво Ви харесва най-много в тази функционалност?",
|
1607 |
+
"RateFeatureLeaveMessageLikeExtra": "Моля, уведомете ни за това как използвате тази функционалност, за да можем да подобрим Matomo допълнително.",
|
1608 |
+
"RateFeatureLeaveMessageLikeExtraConfigurable": "Има ли опции за конфигурация, които намирате за особено полезни? Има ли други опции, които бихте искали да видите?",
|
1609 |
+
"RateFeatureLeaveMessageLikeExtraEasy": "Има ли нещо друго, което би могло да направи Matomo по-лесен за използване или да подобри изживяването Ви?",
|
1610 |
+
"RateFeatureLeaveMessageLikeExtraUseful": "Можете ли да ни кажете малко за това как използвате тази информация и какво намирате за най-полезно в нея?",
|
1611 |
+
"RateFeatureLeaveMessageLikeNamedFeature": "Какво Ви харесва най-много в %1$s?",
|
1612 |
+
"RateFeatureOtherReason": "Друга причина",
|
1613 |
+
"RateFeatureSendFeedbackInformation": "Вашата платформа Matomo ще ни изпрати (екипът на Matomo) имейл (включително Вашия имейл адрес), за да можем да се свържем с Вас, ако имате някакви въпроси.",
|
1614 |
"RateFeatureThankYouTitle": "Благодарим ви, че оценихте '%s'!",
|
1615 |
+
"RateFeatureTitle": "Харесвате ли функционалността „%s“? Моля, уведомете ни, за да можем да подобрим Matomo.",
|
1616 |
+
"RateFeatureUsefulInfo": "Полезна информация",
|
1617 |
+
"ReferBannerEmailShareBody": "Избирам Matomo, етична алтернатива на Google Analytics, която ми дава 100%% собственост върху данните и защитава данните на посетителите на моя уебсайт.\nСподелям това съобщение с надеждата, че и Вие ще си върнете властта от Google и ще получите пълна собственост върху собствените си данни.\n\nВижте Matomo на https:\/\/matomo.org",
|
1618 |
+
"ReferBannerEmailShareSubject": "Насочете ги към Matomo Analytics сега, за да си върнат контрола!",
|
1619 |
+
"ReferBannerLonger": "Моля, помогнете ни да разпространим информацията за нас, така че повече хора да получат контрол върху своите аналитични данни.",
|
1620 |
+
"ReferBannerSocialShareText": "Ако използвате Google Analytics, поддържайте контрол, като преминете към етична алтернатива като Matomo сега!",
|
1621 |
+
"ReferBannerTitle": "Вярвате ли в Matomo?",
|
1622 |
+
"ReferMatomo": "Реферирайте Матомо",
|
1623 |
+
"RemindMeLater": "Напомни ми по-късно",
|
1624 |
+
"RemoveOtherLabel": "Искам да видя моите „Други“ данни",
|
1625 |
+
"ReviewMatomoTitle": "Харесвате ли Матомо?",
|
1626 |
+
"SearchHelpResources": "Потърсете помощни ресурси на matomo.org",
|
1627 |
"SendFeedback": "Изпрати съобщението",
|
1628 |
"ThankYou": "Благодаря, че помогнахте да направим Matomo по-добър!",
|
1629 |
+
"ThankYouForSpreading": "Благодарим Ви, че разпространявате информацията и създавате по-безопасна мрежа",
|
1630 |
+
"ThankYouHeart": "Благодарим Ви, че ни помогнахте да направим Matomo по-добър! %1$s",
|
1631 |
+
"ThankYourForFeedback": "Ние наистина оценяваме Вашите отзиви! %1$s Ще се свържем с Вас, в случай че ни е необходима повече информация относно Вашата обратна връзка.",
|
1632 |
"TopLinkTooltip": "Може да ни кажете какво мислите, както и да изискате професионална помощ.",
|
1633 |
+
"TrackMultipleSites": "Трябва да проследявам множество сайтове или поддомейни",
|
1634 |
+
"UserGuides": "Ръководства за потребителя",
|
1635 |
+
"ViewAnswersToFAQ": "Вижте отговорите на %1$sЧесто задавани въпроси%2$s",
|
1636 |
+
"ViewUserGuides": "Научете как да конфигурирате Matomo и как ефективно да анализирате данните си с нашите %1$sръководства за потребителя%2$s",
|
1637 |
+
"VisitTheForums": "Посетете форумите %1$s %2$s и получете помощ от общността на потребителите на Matomo",
|
1638 |
+
"WontShowAgain": "Няма да показваме това съобщение отново."
|
1639 |
},
|
1640 |
"GeoIp2": {
|
1641 |
"AssumingNonApache": "Не може да бъде намерена apache_get_modules функцията, което предполага, че това не е Apache сървър.",
|
1642 |
+
"AutomaticSetup": "Автоматично конфигурирайте геолокацията с помощта на dbip база данни",
|
1643 |
+
"AutomaticSetupDescription": "За правилно геолокиране Matomo изисква външна база данни. Използвайки тази опция, Matomo автоматично ще бъде конфигуриран да изтегля и използва най-новата база данни на ниво dbip град. [%1$sПреглед на лицензионните условия%2$s]",
|
1644 |
+
"CannotFindGeoIPDatabaseInArchive": "В tar архива %1$s не може да бъде намерена валидна DBIP \/ GeoIP база данни!",
|
1645 |
"CannotFindGeoIPServerVar": "Променливата %s не е зададена. Възможно е сървърът да не е настроен правилно.",
|
1646 |
"CannotListContent": "Съдържанието за %1$s: %2$s не може да бъде заредено",
|
1647 |
+
"CannotSetupGeoIPAutoUpdating": "Изглежда, че съхранявате Вашите геолокационни бази данни извън Matomo (можем да го кажем, тъй като няма бази данни в поддиректорията misc, но Вашият GeoIP работи). Matomo не може автоматично да актуализира Вашите геолокационни бази данни, ако те се намират извън директорията misc.",
|
1648 |
+
"CannotUnzipGeoIPFile": "Не можа да се разархивира GeoIP файл в %1$s: %2$s",
|
1649 |
"DownloadNewDatabasesEvery": "Обновяване на базата от данни на всеки",
|
1650 |
+
"DownloadingDb": "Сваляне %s",
|
1651 |
+
"FatalErrorDuringDownload": "Възникна фатална грешка при изтеглянето на този файл. Може да има нещо нередно с Вашата интернет връзка, с изтеглената от Вас база данни за геолокация или Matomo. Опитайте да го изтеглите и инсталирате ръчно.",
|
1652 |
"FoundApacheModules": "Matomo откри следните Apache модули",
|
|
|
1653 |
"GeoIPDatabases": "GeoIP база данни",
|
1654 |
+
"GeoIPImplHasAccessTo": "Тази реализация на GeoIP има достъп до следните типове бази данни",
|
1655 |
+
"GeoIPLocationProviderDesc_ServerBasedAnonWarn": "Забележка: IP анонимизирането няма ефект върху местоположенията, докладвани от този доставчик. Преди да го използвате с IP анонимизация, уверете се, че това не нарушава никакви закони за поверителност, на които може да сте подчинени.",
|
1656 |
+
"GeoIPLocationProviderNotRecommended": "Геолокацията работи, но не използвате някой от препоръчаните доставчици.",
|
1657 |
+
"GeoIPNoDatabaseFound": "Тази реализация на GeoIP не успя да намери никаква база данни.",
|
1658 |
"GeoIPNoServerVars": "Matomo не може да намери GeoIP %s променливи.",
|
1659 |
"GeoIPServerVarsFound": "Matomo засече следните GeoIP %s променливи",
|
1660 |
+
"GeoIPUpdaterInstructions": "Въведете връзките за изтегляне на Вашите бази данни по-долу. Ако сте закупили бази данни от %3$sdbip%4$s или %1$sMaxMind%2$s, можете да намерите тези връзки във Вашия акаунт в dbip или MaxMind. Моля, свържете се с Вашия доставчик на база данни за геолокация, ако имате проблеми с достъпа до тях.",
|
1661 |
+
"GeoIPUpdaterIntro": "В момента Matomo управлява актуализации за следните бази данни",
|
1662 |
+
"GeoIPVariablesConfigurationHere": "Можете да конфигурирате използваните сървърни променливи %1$s тук %2$s.",
|
1663 |
+
"GeoLiteCityLink": "Ако използвате базата данни dbip city lite, използвайте тази връзка: %1$s%2$s%3$s",
|
1664 |
"HowToInstallApacheModule": "Как да инсталирам GeoIP модул за Apache?",
|
1665 |
"HowToInstallNginxModule": "Как се инсталира GeoIP модул за Nginx?",
|
1666 |
+
"HowToSetupGeoIP": "Как да настроите точна геолокация с dbip",
|
1667 |
+
"HowToSetupGeoIPIntro": "Изглежда, че настройката, за определяне на местоположението, не е направена. Това е полезна функция и без нея няма да се вижда точна и пълна информация за местоположението на посетителите. Ето и начин, по който може бързо да започнете да го използвате:",
|
1668 |
+
"HowToSetupGeoIP_Step1": "%1$sИзтеглете%2$s базата данни DBIP City Lite от %3$sdbip%4$s.",
|
1669 |
+
"HowToSetupGeoIP_Step2": "Извлечете този файл и копирайте резултата, %1$s в поддиректорията %2$smisc%3$s Matomo и го преименувайте на %4$s (можете да направите това или чрез FTP или SSH).",
|
1670 |
+
"HowToSetupGeoIP_Step3": "Презаредете този екран. Доставчикът %1$sDBIP \/ GeoIP (PHP)%2$s вече ще бъде %3$sИнсталиран%4$s. Изберете го.",
|
1671 |
+
"HowToSetupGeoIP_Step4": "И сте готови! Току-що настроихте Matomo да използва DBIP, което означава, че ще можете да виждате регионите и градовете на посетителите си заедно с много точна информация за държавата.",
|
1672 |
"HttpServerModule": "HTTP сървърен модул",
|
1673 |
+
"IPurchasedGeoIPDBs": "Купих по-точни бази данни от %3$sdbip%4$s или %1$sMaxMind%2$s и искам да настроя автоматични актуализации.",
|
1674 |
"ISPDatabase": "ISP база данни",
|
1675 |
+
"ISPRequiresProviderPlugin": "Проследяването на доставчици на интернет услуги изисква плъгинът за доставчици да бъде инсталиран и активиран.",
|
1676 |
+
"IWantToDownloadFreeGeoIP": "Искам да изтегля безплатната DBIP база данни...",
|
1677 |
+
"InvalidGeoIPUpdateHost": "Хостът на URL адреса за актуализация на GeoIP %1$s не е надежден. За да разрешите изтеглянето на GeoIP актуализации от хостове, различни от %2$s, моля, коригирайте настройката за %3$s в конфигурацията.",
|
1678 |
+
"InvalidGeoIPUpdatePeriod": "Невалиден период за обновяването на GeoIP: %1$s. Валидните стойности са %2$s.",
|
1679 |
"LocationDatabase": "Местоположение база данни",
|
1680 |
"LocationDatabaseHint": "Базата от данни указваща местоположение е или за държава, регион или град.",
|
1681 |
+
"LocationProviderDesc_Php": "Този доставчик на местоположение е най-лесният за инсталиране, тъй като не изисква конфигурация на сървъра (идеален за споделен хостинг!). Той използва база данни DBIP или GeoIP 2 и PHP API на MaxMind, за да определи точно местоположението на Вашите посетители.",
|
1682 |
+
"LocationProviderDesc_Php_WithExtension": "Този доставчик на местоположение се ускорява от инсталираното разширение %1$smaxminddb%2$s.",
|
1683 |
+
"LocationProviderDesc_ServerModule": "Този доставчик на местоположение използва модула GeoIP 2, който е инсталиран на Вашия HTTP сървър. Този доставчик е бърз и точен, но %1$sможе да се използва само с нормално проследяване на браузъра.%2$s",
|
1684 |
+
"LocationProviderDesc_ServerModule2": "Ако трябва да импортирате лог файлове или да направите нещо друго, което изисква задаване на IP адреси, използвайте %3$sPHP GeoIP 2 реализация %4$s и инсталирайте %1$smaxminddb разширение %2$s.",
|
1685 |
+
"MalFormedUpdateUrl": "URL адресът %1$s изглежда невалиден. Моля, уверете се, че сте въвели валиден URL адрес, започващ с http:\/\/ или https:\/\/",
|
1686 |
+
"NotManagingGeoIPDBs": "В момента Matomo не управлява никакви DBIP или MaxMind бази данни.",
|
1687 |
+
"PluginDescription": "Предоставя DBIP \/ GeoIP2 доставчици на местоположение.",
|
1688 |
+
"ServerBasedVariablesConfiguration": "Конфигурация за сървърни променливи, използвани от GeoIP 2 сървърни модули",
|
1689 |
+
"ServerVariableFor": "Сървърна променлива за %s",
|
1690 |
+
"SetupAutomaticUpdatesOfGeoIP": "Настройте автоматични актуализации на геолокационни бази данни",
|
1691 |
+
"ShowCustomServerVariablesConfig": "Използвам сървърния модул Geoip2 (Nginx, Apache...) и искам да конфигурирам сървърни променливи",
|
1692 |
+
"ThisUrlIsNotAValidGeoIPDB": "Изтегленият файл не е валидна база данни за геолокация. Моля, проверете отново URL адреса или изтеглете файла ръчно.",
|
1693 |
"UnsupportedArchiveType": "Типът архив %1$s не се поддържа.",
|
1694 |
"UpdaterHasNotBeenRun": "Не е пускана до момента задача за обновяване.",
|
1695 |
"UpdaterIsNotScheduledToRun": "Не е планирано да се изпълнява в бъдеще.",
|
1703 |
"AddNewGoal": "Добави нова цел",
|
1704 |
"AddNewGoalOrEditExistingGoal": "%1$sДобави нова цел%2$s или %3$sРедактирай%4$s съществуващите цели",
|
1705 |
"AllowGoalConvertedMoreThanOncePerVisit": "Позволи Целта да бъде конвертирана повече от веднъж за едно посещение",
|
1706 |
+
"AllowMultipleConversionsPerVisit": "Разреши няколко конверсии за посещение",
|
1707 |
+
"AtLeastMinutes": "поне %1$s минути. Използвайте десетични знаци за съвпадение на секунди, например %2$s за съвпадение на 30 секунди.",
|
1708 |
"BestCountries": "Вашето най-добро конвертиране на страните е:",
|
1709 |
"BestKeywords": "Вашите най-конвертиращи ключови думи:",
|
1710 |
"BestReferrers": "Вашето най-добро конвертиране на посещения от сайтове е:",
|
1711 |
+
"CancelAndReturnToGoals": "Отказ и %1$sвръщане към списъка с цели%2$s",
|
1712 |
"CaseSensitive": "Отчитане на съвпадения",
|
|
|
1713 |
"CategoryTextDevicesDetection_DevicesDetection": "Устройства",
|
1714 |
+
"CategoryTextGeneral_Visit": "ангажираност",
|
1715 |
+
"CategoryTextGeneral_Visitors": "Местоположение на потребителя",
|
1716 |
+
"CategoryTextReferrers_Referrers": "Референции",
|
1717 |
+
"CategoryTextVisitsSummary_VisitsSummary": "Потребителски атрибут",
|
1718 |
"ClickOutlink": "натиснат върху връзката, водеща към външен сайт",
|
1719 |
+
"ClickToViewThisGoal": "Кликнете, за да видите тази цел.",
|
1720 |
+
"ColumnAverageOrderRevenueDocumentation": "Средната стойност на поръчката (AOV) е общият приход от всички поръчки в Ecommerce, разделен на броя на поръчките.",
|
1721 |
"ColumnAveragePriceDocumentation": "Средната печалба за този %s.",
|
1722 |
"ColumnAverageQuantityDocumentation": "Средното количество за този %s продадени чрез поръчки от електронен магазин.",
|
1723 |
"ColumnConversionRateDocumentation": "Брой конверсии за %s.",
|
1725 |
"ColumnConversions": "Конверсия",
|
1726 |
"ColumnConversionsDocumentation": "Брой на конверсии за %s.",
|
1727 |
"ColumnOrdersDocumentation": "Пълният брой поръчки, които съдържат %s поне веднъж.",
|
1728 |
+
"ColumnOverallRevenue": "Общи приходи",
|
1729 |
"ColumnPurchasedProductsDocumentation": "Броят на поръчаните продукти е сумата от всичкото количество продадени продукти във всички поръчки.",
|
1730 |
"ColumnQuantityDocumentation": "Количеството е целият брой от продукти продаден за всеки %s.",
|
1731 |
"ColumnRevenueDocumentation": "Общи приходи генерирани от %s.",
|
1733 |
"ColumnVisits": "Пълният брой на посещенията, независимо дали е задействана цел или не.",
|
1734 |
"ColumnVisitsProductDocumentation": "Броят посещения на Продуктовата\/Категорийна страница. Това се използва също за да се изчисли %s степента на конверсия. Метричните данни са в отчета, ако изгледа Електронна търговия е бил настроен в Продукт\/Категория страниците.",
|
1735 |
"Contains": "съдържа %s",
|
1736 |
+
"Conversion": "Преобразуване",
|
1737 |
"ConversionByTypeReportDocumentation": "Този отчет дава детайлна информация относно развитието на целта (конверсии, степен на конверсията и приход от посещението) за всяка една от категориите, показани на левия панел. %1$s Моля натиснете на някоя от категориите, за да видите отчета. %2$s За повече информация, прочетете %3$sдокументацията за проследяване на целите на piwik.org%4$s",
|
1738 |
"ConversionRate": "%s обменният курс",
|
1739 |
"Conversions": "%s конверсия",
|
1740 |
+
"ConversionsDescription": "преобразувания",
|
1741 |
"ConversionsOverview": "Общ преглед на реализациите",
|
1742 |
"ConversionsOverviewBy": "Преглед на конверсията по тип посещения",
|
1743 |
"DaysToConv": "Дни към Конверсии",
|
1744 |
+
"DaysToConvReportDocumentation": "Този отчет показва колко дни изминават, преди посетителите Ви да реализират цел.",
|
1745 |
+
"DefaultGoalConvertedOncePerVisit": "(По подразбиране) Целта може да бъде конвертирана само веднъж на посещение",
|
1746 |
"DefaultRevenueHelp": "Например, формуляр, предоставен от един посетител може да струва средно 10 долара. Matomo ще Ви помогне да разберете колко добре се представят Вашите посетители.",
|
1747 |
+
"DefaultRevenueLabel": "Приходи по подразбиране на целта",
|
1748 |
"DeleteGoalConfirm": "Сигурни ли сте, че желаете да изтриете тази цел %s?",
|
1749 |
+
"Details": "Подробности за целта",
|
1750 |
"DocumentationRevenueGeneratedByProductSales": "Продажба на продукти. Изключва данък, доставка и отстъпка",
|
1751 |
"Download": "Изтеглете файл",
|
1752 |
"Ecommerce": "Електронна търговия",
|
1755 |
"EcommerceOrder": "Електронна търговия поръчка",
|
1756 |
"EcommerceOverview": "Електронна търговия преглед",
|
1757 |
"EcommerceReports": "Електронна търговия доклади",
|
1758 |
+
"EventValueAsRevenueHelp": "Ако събитието, спрямо което съпоставяте, има приходи и тези приходи се проследяват като стойност на събитието, можете да активирате тази опция, за да записвате стойността на събитието като приход от целевата реализация. Ако Вашите целеви приходи няма да варират за всяка реализация, можете да игнорирате тази опция и просто да зададете приходи по подразбиране по-горе.",
|
1759 |
+
"EventValueAsRevenueHelp2": "Забележка: Ако са дефинирани както приход от цел по подразбиране, така и стойност на събитието, ще се използва стойността на събитието. Ако тази опция е активирана и в заявка не се изпраща стойност на събитие, ще се използва приходът по подразбиране (ако е дефиниран).",
|
1760 |
"ExceptionInvalidMatchingString": "Ако изберете 'точно съвпадение', съвпадащият низ, трябва да започне с URL %1$s. Например, '%2$s'.",
|
1761 |
"ExternalWebsiteUrl": "външен URL",
|
1762 |
"Filename": "име на файла",
|
1766 |
"GoalIsTriggered": "Целта е задействана",
|
1767 |
"GoalIsTriggeredWhen": "Целта е задействана, когато",
|
1768 |
"GoalName": "Име на цел",
|
1769 |
+
"GoalRevenue": "Приходи от цел",
|
1770 |
+
"GoalX": "Цел %s",
|
1771 |
"Goals": "Цели",
|
1772 |
+
"GoalsAdjective": "Цели %s",
|
1773 |
+
"GoalsBy": "Цели по %s",
|
1774 |
"GoalsOverview": "Общ преглед на целите",
|
1775 |
"GoalsOverviewDocumentation": "Това е преглед на конверсията на вашите цели. Поначало, графиката показва сумата от всички ваши конверсии. %s Под графиката ще видите отчетите за конверсия на всички ваши цели. Блестящите линии можете да уголемите като кликнете върху тях.",
|
1776 |
+
"GoalsOverviewSubcategoryHelp1": "Прегледът на целите отчита ефективността на целите, определени за Вашия уебсайт. Можете да получите достъп до процентите на реализация на целта си, сумата на генерираните приходи и пълните отчети за всяка.",
|
1777 |
+
"GoalsOverviewSubcategoryHelp2": "Кликнете върху отделен показател в диаграмата на спарклайн, за да се съсредоточите върху него в рамките на графиката на еволюцията в пълен размер.",
|
1778 |
"HelpOneConversionPerVisit": "Ако страница, съпадащата с тази Цел е обновена или гледана повече от веднъж за едно посещение, Целта ще бъде проследена само първият път.",
|
1779 |
"IsExactly": "е точно %s",
|
1780 |
+
"LearnMoreAboutGoalTrackingDocumentation": "Научете повече за %1$s Проследяване на цели в Matomo%2$s в потребителската документация.",
|
1781 |
"LeftInCart": "%s остатък в количката",
|
1782 |
+
"ManageGoals": "Управление на целите",
|
1783 |
+
"ManageGoalsSubcategoryHelp1": "Този раздел Ви позволява да създавате и редактирате цели за конкретни действия, които посетителите предприемат на Вашия сайт, като например посещение на определена страница или подаване на конкретен формуляр. Отчетите за целите варират, но могат да Ви помогнат да проследявате ефективността на уебсайта си спрямо бизнес целите, като генериране на потенциални клиенти, онлайн продажби и повишена експозиция на марката.",
|
1784 |
+
"ManageGoalsSubcategoryHelp2": "Научете повече в нашето ръководство за цели тук.",
|
1785 |
"Manually": "ръчно",
|
1786 |
"ManuallyTriggeredUsingJavascriptFunction": "Целта е ръчно задействана с помощта на JavaScript API trackGoal()",
|
1787 |
"MatchesExpression": "съответства на изразените %s",
|
1788 |
+
"NGoals": "%s цели",
|
1789 |
+
"NItems": "%s артикули",
|
1790 |
+
"NRevenue": "%s приходи",
|
1791 |
+
"NeedAccess": "Само администратор или потребител с достъп до супер потребител може да управлява цели за даден уебсайт.",
|
1792 |
+
"NewGoalIntro": "Проследяването на целевите реализации е един от най-ефективните начини за измерване и подобряване на Вашите бизнес цели.",
|
1793 |
"NewVisitorsConversionRateIs": "Стойност на конверсията от новите посетители е %s",
|
1794 |
+
"NoConversionsNoReportsMessage": "Отчетите не се показват, защото няма данни за реализациите за избраната цел и период.",
|
1795 |
+
"NoGoalsNeedAccess2": "Само потребител с Write привилегии, администратор или потребител с достъп до супер потребител може да управлява цели за даден уебсайт. Моля, помолете администратор на Matomo да зададе цел за Вашия уебсайт. <br>Проследяването на цели е чудесен начин да помогнете за разбирането и увеличаването на ефективността на Вашия уебсайт!",
|
1796 |
"Optional": "(по избор)",
|
1797 |
+
"OverallConversionRate": "общ процент на реализация (посещения с изпълнена цел)",
|
1798 |
+
"OverallRevenue": "общи приходи",
|
1799 |
+
"OverviewReportDocumentation": "Този отчет дава общ преглед на това колко добре Вашите посетители реализират конкретна цел.",
|
1800 |
"PageTitle": "Заглавие на страница",
|
1801 |
"Pattern": "Модел",
|
1802 |
+
"PluginDescription": "Създавайте цели и вижте подробни отчети за реализациите на целите: развитие с течение на времето, приходи на посещение, реализации на референт, на ключова дума и др.",
|
1803 |
"ProductCategory": "Категория на продукт",
|
1804 |
"ProductName": "Име на продукт",
|
1805 |
+
"ProductNames": "Имена на продукти",
|
1806 |
+
"ProductPrice": "Цена на продукта",
|
1807 |
+
"ProductQuantity": "Количество продукт",
|
1808 |
"ProductSKU": "SKU на продукта",
|
1809 |
+
"ProductSKUs": "SKU на продукти",
|
1810 |
+
"Products": "Продукти",
|
1811 |
"ReturningVisitorsConversionRateIs": "Стойност на конверсията от върналите се посетители е %s",
|
1812 |
+
"SendEvent": "Изпратете събитие",
|
1813 |
"SingleGoalOverviewDocumentation": "Това е преглед на конверсиите за една цел. %s Блестящите линии могат да бъдат уголемени като кликнете върху тях.",
|
1814 |
+
"ThereIsNoGoalToManage": "Няма цел за управление за уебсайт %s",
|
1815 |
+
"TimeInMinutes": "Време в минути",
|
1816 |
"URL": "URL",
|
1817 |
+
"UpdateGoal": "Обнови цел",
|
1818 |
+
"UseEventValueAsRevenue": "Използвайте стойността на събитието (ако съществува) като приход от целеви реализации.",
|
1819 |
"ViewAndEditGoals": "Виж и редактирай цели",
|
1820 |
+
"VisitDuration": "продължителността на посещението е",
|
1821 |
+
"VisitDurationMatchAttr": "Останете за определен период от време",
|
1822 |
"VisitPageTitle": "Посещения по заглавие на страница",
|
|
|
1823 |
"VisitUrl": "посетят определен URL (страница или група от страници)",
|
1824 |
+
"VisitsUntilConv": "Посещения към Конверсии",
|
1825 |
+
"VisitsUntilConvReportDocumentation": "Този отчет показва броя посещения, направени преди посетител да реализира цел.",
|
1826 |
"WhenVisitors": "когато посетителите",
|
1827 |
"WhereThe": "където",
|
1828 |
+
"WhereVisitedPageManuallyCallsJavascriptTrackerLearnMore": "Посетената страница трябва да съдържа извикване на метода „trackGoal“ в JavaScript (%1$sнаучете повече%2$s)",
|
1829 |
"YouCanEnableEcommerceReports": "Можете да включите %1$s за този уебсайт в %2$s страницата."
|
1830 |
},
|
1831 |
"ImageGraph": {
|
1832 |
+
"ColumnOrdinateMissing": "Колоната '%1$s' не е намерена в този доклад. Опитайте с %2$s",
|
1833 |
+
"PluginDescription": "Генерирайте красиви статични изображения PNG за всеки от Вашите отчети за данни."
|
1834 |
},
|
1835 |
"Insights": {
|
1836 |
"ControlComparedToDescription": "Ръст спрямо",
|
1837 |
+
"ControlFilterByDescription": "Покажи всички, само изменящи се, само нови или само изчезнали",
|
1838 |
+
"DatePeriodCombinationNotSupported": "Не е възможно да се генерират статистически данни за тази комбинация от дата и период.",
|
1839 |
"DayComparedToPreviousDay": "предишен ден",
|
1840 |
"DayComparedToPreviousWeek": "същия ден през предходната седмица",
|
1841 |
"DayComparedToPreviousYear": "същия ден през предходната година",
|
1842 |
"Filter": "Филтър",
|
1843 |
+
"FilterIncreaserAndDecreaser": "Увеличаващ се и намаляващ",
|
1844 |
+
"FilterOnlyDecreaser": "Само намаляващ",
|
1845 |
+
"FilterOnlyDisappeared": "Само изчезнал",
|
1846 |
+
"FilterOnlyIncreaser": "Само нарастващ",
|
1847 |
+
"FilterOnlyMovers": "Само движещи се",
|
1848 |
"FilterOnlyNew": "Само нови",
|
1849 |
+
"IgnoredChanges": "Промените, засягащи по-малко от %s посещения, бяха игнорирани.",
|
1850 |
"MonthComparedToPreviousMonth": "предишен месец",
|
1851 |
"MonthComparedToPreviousYear": "същия месец на предходната година",
|
1852 |
+
"MoversAndShakersWidgetTitle": "Движещи се и променящи се",
|
1853 |
+
"NoResultMatchesCriteria": "Няма редове, отговарящи на критериите",
|
1854 |
+
"OverviewWidgetTitle": "Преглед на аналитичните показатели",
|
1855 |
+
"PluginDescription": "Показва информация за Вашия трафик. Информацията може да се достъпи като уиджети на таблото или като иконка в новите отчети, което позволява да се проседят важни тенденции в данните.",
|
1856 |
+
"TitleConsideredInsightsChanges": "Редовете се увеличават или намаляват с най-малко %1$s посещения (%2$s%% от %3$s общи посещения).",
|
1857 |
+
"TitleConsideredInsightsGrowth": "Следните редове имат ръст от най-малко %1$s%% в сравнение с %2$s.",
|
1858 |
+
"TitleConsideredMoversAndShakersChanges": "Считани за преместващи се само ако са нараснали с повече от %1$s%% посещения или са се свили с по-малко от %2$s%% посещения, нови записи само ако са се увеличили с повече от %3$s%% посещения (%4$s) и изчезнали редове, ако се свият с по-малко от %5$s%% посещения (%6$s).",
|
1859 |
+
"TitleConsideredMoversAndShakersGrowth": "%1$s се промени от %2$s на %3$s в сравнение с %4$s. Въз основа на това се очаква еволюция на всеки ред от %5$s%%.",
|
1860 |
+
"TitleRowChangeDetails": "„%1$s“ се промени от %2$s (%3$s) на %4$s (%5$s) %6$s.",
|
1861 |
"TitleRowDisappearedDetails": "'%1$s' намалял с %2$s и изчезна в %3$s сравнено с %4$s.",
|
1862 |
+
"TitleRowMoverAndShaker": "Този ред е имал по-голямо въздействие от средното.",
|
1863 |
+
"TitleRowNewDetails": "„%1$s“ се увеличава с %2$s и е ново в сравнение с %3$s.",
|
1864 |
"WeekComparedToPreviousWeek": "предишна седмица",
|
1865 |
+
"WidgetCategory": "Аналитични показатели",
|
1866 |
"YearComparedToPreviousYear": "предишна година"
|
1867 |
},
|
1868 |
"Installation": {
|
1869 |
+
"CannotConnectToDb": "Не можа да се свърже с базата данни",
|
1870 |
+
"CannotConnectToDbResolvingExplanation": "Това може да е временен проблем, опитайте %1$s да опресните страницата %2$s. Моля, свържете се с администратор на Matomo, ако проблемът продължава.",
|
1871 |
+
"CollaborativeProject": "Matomo е съвместен проект, изграден с любов.",
|
1872 |
+
"ConfigurationHelp": "Коригирайте Вашия конфигурационен файл на Matomo, като премахнете config\/config.ini.php и възобновите инсталацията, или като коригирате настройките за връзката към базата данни.",
|
1873 |
+
"ConfirmDeleteExistingTables": "Потвърдете изтриването на таблиците %s от Вашата база данни. ПРЕДУПРЕЖДЕНИЕ: ДАННИ ОТ ТЕЗИ ТАБЛИЦИ НЕ МОГАТ ДА БЪДАТ ВЪЗСТАНОВЕНИ!",
|
1874 |
"Congratulations": "Поздравления",
|
1875 |
+
"CongratulationsHelp": "<p>Поздравления! Вашата инсталация на Matomo е завършена.<\/p><p>Уверете се, че Вашият проследяващ код е въведен на страниците Ви и изчакайте първите си посетители.<\/p>",
|
1876 |
+
"CopyBelowInfoForSupport": "Копирайте или изтеглете информацията по-долу, в случай че нашият екип за поддръжка Ви поиска тази информация.",
|
1877 |
+
"CopySystemCheck": "Копиране на проверката на системата",
|
1878 |
"DatabaseAbilities": "Възможности на базата данни",
|
1879 |
"DatabaseCreation": "БД създаване",
|
1880 |
+
"DatabaseErrorConnect": "Не може да се свърже със сървъра на базата данни",
|
1881 |
+
"DatabaseServerVersion": "Версия на сървъра за бази данни",
|
1882 |
"DatabaseSetup": "Настройки на базата от данни (БД)",
|
1883 |
"DatabaseSetupAdapter": "адаптер",
|
1884 |
"DatabaseSetupDatabaseName": "БД име",
|
1885 |
"DatabaseSetupLogin": "вход",
|
1886 |
"DatabaseSetupServer": "БД сървър",
|
1887 |
"DatabaseSetupTablePrefix": "префикс на таблицата",
|
1888 |
+
"DefaultSettings": "Настройки по подразбиране на Matomo",
|
1889 |
+
"DefaultSettingsHelp": "Matomo идва с настройки по подразбиране. Можете да ги персонализирате сега или да го направите по-късно в администраторския екран.",
|
1890 |
+
"DownloadSystemCheck": "Изтеглете проверката на системата",
|
1891 |
"Email": "Имейл",
|
1892 |
+
"EmailPrivacyNotice": "Вашият имейл адрес ще се използва само за изпращане на бюлетин. Споделя се с Mad Mimi, за да го направи, но доставчикът от трета страна може да се промени. Ние няма да споделяме имейла Ви с никого или да го използваме за други цели. Отпишете се по всяко време. В %1$sполитиката за поверителност%2$s има повече информация.",
|
1893 |
"Extension": "разширения",
|
1894 |
+
"FasterReportLoading": "по-бързо зареждане на отчети",
|
1895 |
"Filesystem": "Файлова система",
|
1896 |
"GetInvolved": "Ако харесвате това, което виждате, може да се %1$sвключите%2$s.",
|
1897 |
+
"GoBackAndDefinePrefix": "Върнете се назад и дефинирайте префикс за таблиците на Matomo",
|
1898 |
"HappyAnalysing": "Приятно анализиране!",
|
1899 |
+
"IfPiwikInstalledBeforeTablesCanBeKept": "Ако сте инсталирали Matomo преди и имате някои таблици във Вашата база данни, не се притеснявайте, можете да използвате повторно същите таблици и да запазите съществуващите си данни.",
|
1900 |
+
"InformationalResults": "Информационни резултати",
|
1901 |
"Installation": "Инсталация",
|
1902 |
"InstallationStatus": "Състояние на инсталацията",
|
1903 |
+
"InsufficientPrivilegesHelp": "Тези привилегии могат да бъдат добавени в phpMyAdmin или чрез изпълнение на правилните SQL заявки. Ако не знаете как, моля, помолете Вашия системен администратор да го направи.",
|
1904 |
+
"InsufficientPrivilegesMain": "Или базата данни не съществува (и не може да бъде създадена), или посоченият потребител има недостатъчни привилегии. Потребителят на базата данни трябва да има следните привилегии: %s",
|
1905 |
+
"InvalidStateError": "Грешка: Matomo вече е инсталиран. %1$s Върнете се %2$s към Matomo %3$s.",
|
1906 |
+
"JSTracking_EndNote": "Бележка: След инсталационния процес, можете да генерирате проследяващ код от администраторската секция %1$sПроследяващ код%2$s.",
|
1907 |
"JSTracking_Intro": "За да може да се осъществи проследяване на трафика посредством Matomo, е нужно да се добави допълнителен код във всяка от вашите страници.",
|
1908 |
+
"JsTagArchivingHelp1": "За уебсайтове със среден и висок трафик някои оптимизации помагат на Matomo да работи по-бързо (като %1$sнастройка на автоматично архивиране%2$s).",
|
1909 |
+
"LargePiwikInstances": "Помощ за потребители с уебсайтове с висок трафик",
|
1910 |
"Legend": "Легенда",
|
1911 |
+
"LoadDataInfileRecommended": "Трябва да отстраните този проблем, ако Вашият сървър Matomo проследява уебсайтове с висок трафик (например > 100 000 страници на месец).",
|
1912 |
+
"LoadDataInfileUnavailableHelp": "Съвет: Използването на %1$s чрез актуализиране на Вашия PHP и MySQL софтуер и настройките така, че потребителят на Вашата база данни има привилегията %2$s, ускорява много процеса на архивиране на Matomo.",
|
1913 |
"NfsFilesystemWarning": "Вашият сървър ползва NFS файлова система.",
|
1914 |
+
"NfsFilesystemWarningSuffixAdmin": "Това означава, че Matomo ще бъде изключително бавен, когато използва сесии, базирани на файлове.",
|
1915 |
+
"NfsFilesystemWarningSuffixInstall": "Използването на файлови сесии в NFS е изключително бавно, така че Matomo ще използва сесии на база данни. Ако имате много едновременни потребители на таблото за управление, може да се наложи да увеличите максималния брой клиентски връзки към сървъра на базата данни.",
|
1916 |
+
"NoConfigFileFound": "Не можа да бъде намерен конфигурационният файл на Matomo, а се опитвате да получите достъп до страница на Matomo.",
|
1917 |
+
"NotSupported": "не се поддържа",
|
1918 |
"Optional": "По избор",
|
1919 |
"Password": "Парола",
|
1920 |
+
"PasswordDoNotMatch": "несъответстващи пароли",
|
1921 |
"PasswordRepeat": "Парола (повторно)",
|
1922 |
+
"PercentDone": "%s %% готово",
|
1923 |
+
"PerformanceSettingsDesc1": "Вашият Matomo е настроен и готов да проследява и отчита трафика на Вашия уебсайт. Настройте %1$sCLI архивиране%2$s, ако смятате, че е бавно. Това генерира отчети във фонов режим, а не при поискване.",
|
1924 |
+
"PerformanceSettingsDesc2": "Това изисква добавяне на команда Matomo към Cron, което не може да бъде направено автоматично от инсталатора. %1$sПрочетете нашите често задавани въпроси, за да се научите да го настройвате сами.%2$s",
|
1925 |
+
"PhpBinaryCheck": "64-битов двоичен PHP",
|
1926 |
+
"PhpBinaryCheckHelp": "32-битов <p>Надстройте до 64-битов PHP двоичен файл до януари 2026 г., за да предотвратите грешки.<\/p>",
|
1927 |
+
"PiwikOrgNewsletter": "абонирайте се за нашия бюлетин, за да получавате редовна информация за Matomo.",
|
1928 |
"PleaseFixTheFollowingErrors": "Моля, поправете следните грешки",
|
1929 |
+
"ProfessionalServicesAdTitle": "Разширени анализи и услуги",
|
1930 |
+
"ProfessionalServicesNewsletter": "изпращайте ми информация за %1$sПрофесионални услуги и продукти%2$s за Matomo",
|
1931 |
+
"ProfessionalServicesfessionalDiscoverHow": "Научете за %1$sдопълнителни продукти и услуги%2$s за Matomo и как да увеличите реализациите и приходите си.",
|
1932 |
+
"ProfessionalServicesfessionalServicesAdText": "Нашата мрежа от експерти може да помогне на Вашата организация да използва анализа на Matomo в пълния си потенциал.",
|
1933 |
"Requirements": "Matomo Изисквания",
|
1934 |
"RestartWebServer": "След като направите промените, рестартирайте уеб сървара.",
|
1935 |
+
"ReusingTables": "Повторно използване на таблиците",
|
1936 |
+
"SeeBelowForMoreInfo": "Повече информация по-долу.",
|
1937 |
+
"SetupWebSiteName": "Име на уебсайт",
|
1938 |
+
"SetupWebSiteURL": "Адрес на уебсайта",
|
1939 |
+
"SetupWebsite": "Настройте уебсайт",
|
1940 |
+
"SetupWebsiteError": "Уебсайтът не можа да се добави",
|
1941 |
+
"SetupWebsiteSetupSuccess": "Сайтът %s е добавен успешно",
|
1942 |
+
"SiteSetup": "Моля, настройте първия уебсайт, който искате да проследявате и анализирате с Matomo:",
|
1943 |
+
"SiteSetupFootnote": "Забележка: след като инсталацията на Matomo е приключила, ще имате възможност да добавите допълнителни сайтове, които да следите.",
|
1944 |
"SuperUser": "Супер потребител",
|
1945 |
+
"SuperUserLogin": "Вход за супер потребител",
|
1946 |
+
"SuperUserSetupError": "Не можа да се добави супер потребител",
|
1947 |
+
"SuperUserSetupSuccess": "Супер потребителят беше създаден успешно.",
|
1948 |
"SystemCheck": "Проверка на системата",
|
1949 |
+
"SystemCheckAutoUpdateHelp": "Забележка: Актуализацията на Matomo с едно кликване изисква разрешение за запис в папката Matomo и нейното съдържание.",
|
1950 |
+
"SystemCheckCronArchiveProcess": "Настройте Cron",
|
1951 |
+
"SystemCheckCronArchiveProcessCLI": "Управление на процеси чрез CLI",
|
1952 |
+
"SystemCheckDatabaseExtensions": "MySQL разширения",
|
1953 |
+
"SystemCheckDatabaseHelp": "Matomo изисква или разширението MySQLi, или разширенията PDO и pdo_mysql заедно.",
|
1954 |
+
"SystemCheckDatabaseSSL": "SSL връзка към база данни",
|
1955 |
+
"SystemCheckDatabaseSSLCipher": "SSL шифър, който се използва",
|
1956 |
+
"SystemCheckDatabaseSSLDisabled": "Поддръжката на SSL е изключена на Вашия сървър за база данни",
|
1957 |
+
"SystemCheckDatabaseSSLNo": "Сървърът на базата данни не е компилиран с поддръжка на SSL",
|
1958 |
+
"SystemCheckDatabaseSSLNotWorking": "%s е настроен на '1', но SSL връзката не работи",
|
1959 |
+
"SystemCheckDatabaseSSLOn": "Вашата база данни не използва SSL-връзки, но я поддържа. Проверете SSL настройките на Вашата база данни в конфигурационния файл на Matomo",
|
1960 |
"SystemCheckDebugBacktraceHelp": "View::factory няма да бъде в състояние да създаде мнение за извикване на модул.",
|
1961 |
+
"SystemCheckError": "Възникна грешка и трябва да бъде коригирана, преди да продължите",
|
1962 |
+
"SystemCheckEvalHelp": "Изисква се от HTML QuickForm и шаблонната система Twig.",
|
1963 |
"SystemCheckExtensions": "Други необходими разширения",
|
1964 |
"SystemCheckFileIntegrity": "Файл целостта",
|
1965 |
+
"SystemCheckFilterHelp": "Трябва да конфигурирате и изградите отново PHP с поддръжка за \"филтър\" (не използвайте --disable-filter).",
|
1966 |
"SystemCheckFunctions": "Необходими функции",
|
1967 |
+
"SystemCheckGDFreeType": "GD > 2.x + FreeType (графики)",
|
1968 |
"SystemCheckGDHelp": "„Блещукащите линии“ (малки графики) и графичните диаграми (в Matomo Mobile приложението и докладите по пощата), няма да работят.",
|
1969 |
+
"SystemCheckGlobHelp": "Тази вградена функция е изключена от Вашия хостинг. Matomo ще се опитва да симулира тази функция, но може да се сблъска с допълнителни ограничения за сигурност. Функционалността може да бъде засегната.",
|
1970 |
+
"SystemCheckGzcompressHelp": "Трябва да активирате zlib разширението и gzcompress функционалнистта.",
|
1971 |
+
"SystemCheckGzuncompressHelp": "Трябва да активирате zlib разширението и gzuncompress функционалнистта.",
|
1972 |
+
"SystemCheckHashHelp": "Конфигурирайте и изградете отново PHP с необходимата поддръжка на hash(), като изключите опцията --disable-hash.",
|
1973 |
+
"SystemCheckJsonHelp": "Задължителното разширение php-json е необходимо на Matomo за четене и записване на JSON данни.",
|
1974 |
+
"SystemCheckMailHelp": "Съобщенията за обратна връзка и „Загубена парола“ няма да могат да бъдат изпращани без „mail()“.",
|
1975 |
"SystemCheckMemoryLimit": "Лимит на паметта",
|
1976 |
"SystemCheckMemoryLimitHelp": "За силно натоварените сайтове, времето за архивиране на данните отнема повече ресурси. Ако е необходимо моля редактирайте memory_limit директивата в php.ini.",
|
1977 |
+
"SystemCheckMemoryNoMemoryLimitSet": "Няма зададено ограничение на паметта",
|
1978 |
+
"SystemCheckNoErrorsOrWarnings": "Няма грешки или предупреждения",
|
1979 |
"SystemCheckOpenURL": "Отворен адрес(URL)",
|
1980 |
+
"SystemCheckOpenURLHelp": "Новините, съобщенията за обновления и автоматичното обновяване за да функционират е необходимо сървъра да поддържа \"cURL\" разширение, allow_url_fopen=On, или fsockopen() да бъдат поддържани.",
|
1981 |
"SystemCheckOtherExtensions": "Други разширения",
|
1982 |
"SystemCheckOtherFunctions": "Други функции",
|
1983 |
+
"SystemCheckPackHelp": "Функцията 'pack()' е необходима за проследяване на посетителите в Matomo.",
|
1984 |
+
"SystemCheckPageSpeedDisabled": "PageSpeed е изключено",
|
1985 |
+
"SystemCheckPageSpeedWarning": "Препоръчително е да изключите модула PageSpeed на Вашия уеб сървър %s: PageSpeed причинява няколко проблема с Matomo, като например: доклади за счупени страници, развитие на счупен ред и т.н. Моля, изключете mod_pagespeed на този сървър.",
|
1986 |
+
"SystemCheckParseIniFileHelp": "Тази вградена функция е изключена на Вашия хост. Matomo ще се опита да я симулира, но може да срещне допълнителни ограничения за сигурност. Ефективността на проследяването ще бъде засегната.",
|
1987 |
+
"SystemCheckPdoAndMysqliHelp": "На GNU\/Linux сървър можете да компилирате PHP със следните опции: %1$s във Вашия php.ini добавете следните редове: %2$s",
|
1988 |
"SystemCheckPhp": "PHP версия",
|
1989 |
"SystemCheckPhpPdoAndMysqli": "Повече информация: %1$sPHP PDO%2$s и %3$sMYSQLI%4$s.",
|
1990 |
+
"SystemCheckPhpSetting": "Настройте Вашия php.ini файл по този начин, за да предотвратите критични грешки: %s",
|
1991 |
+
"SystemCheckSessionHelp": "Конфигурирайте и изградете отново PHP с необходимата поддръжка за \"сесия\" (session) (не използвайте --disable-session).",
|
1992 |
+
"SystemCheckSettings": "Необходима PHP конфигурация (php.ini)",
|
1993 |
+
"SystemCheckShellExecHelp": "Препоръчително е да включите тази вградена функция на PHP. %1$sПрочетете това, за да научите повече.%2$s",
|
1994 |
+
"SystemCheckSummaryNoProblems": "Няма проблеми с настройката на Matomo. Потупайте се по гърба.",
|
1995 |
+
"SystemCheckSummaryThereWereErrors": "Вашата настройка на Matomo има някои %1$sкритични проблеми%2$s. %3$sПоправете ги незабавно.%4$s",
|
1996 |
+
"SystemCheckSummaryThereWereWarnings": "Има някои проблеми с Вашата система. Matomo ще работи, но може да изпитате малки проблеми.",
|
1997 |
+
"SystemCheckTimeLimitHelp": "На уеб сайт с голям трафик изпълнението на процеса на архивиране може да отнеме повече време, отколкото е позволено в момента. Ако е необходимо, променете директивата \"max_execution_time\" във Вашия файл php.ini.",
|
1998 |
"SystemCheckTracker": "Статус на проследяване",
|
1999 |
+
"SystemCheckTrackerHelp": "Не можа да изпълни GET заявка към matomo.php. Опитайте да поставите този URL в белия списък от HTTP удостоверяване и деактивирайте „mod_security“ (може да се наложи да попитате Вашия уеб хост). Повече информация за грешката има в съответния лог файл на Вашия сървър.",
|
2000 |
+
"SystemCheckUpdateHttps": "Актуализиране през HTTPS",
|
2001 |
+
"SystemCheckUpdateHttpsNotSupported": "Matomo не може да използва HTTPS за актуализиране, той ще се върне към несигурната HTTP актуализация. Проверете дали CURL или allow_url_fopen се поддържат и дали OpenSSL PHP-разширението е инсталирано: https:\/\/matomo.org\/faq\/troubleshooting\/faq_177\/.",
|
2002 |
+
"SystemCheckViewFullSystemCheck": "Вижте пълния отчет за проверка на системата",
|
2003 |
+
"SystemCheckWarnDomHelp": "Трябва да включите \"dom\" разширенето (напр: инсталирайте \"php-dom\" и\/или \"php-xml\" пакета).",
|
2004 |
+
"SystemCheckWarnJsonHelp": "Трябва да включите разширението \"JSON\" (например, инсталирайте пакета \"php-json\").",
|
2005 |
"SystemCheckWarnLibXmlHelp": "Трябва да включите \"libxml\" разширението (напр. \"install the php-libxml package\"), тъй като това е нужно на други главни PHP разширения.",
|
2006 |
+
"SystemCheckWarnOpensslHelp": "Трябва да активирате разширението \"OpenSSL\", за да разрешите сигурни актуализации.",
|
2007 |
"SystemCheckWarnSimpleXMLHelp": "Трябва да включите \"SimpleXML\" разширенето (напр: install the \"php-simplexml\" и\/или \"php-xml\" пакета).",
|
2008 |
+
"SystemCheckWarning": "Matomo ще работи нормално, но някои услуги ще липсват.",
|
2009 |
"SystemCheckWinPdoAndMysqliHelp": "За Windows сървър добавете следните редове в php.ini: %s",
|
2010 |
"SystemCheckWriteDirs": "Директории с права за писане",
|
2011 |
"SystemCheckWriteDirsHelp": "За да поправите тази грешка (на Linux сървър), опитайте със следните команди",
|
2012 |
+
"SystemCheckZlibHelp": "Конфигурирайте и изградете отново PHP с необходимата поддръжка на \"zlib\", --with-zlib.",
|
|
|
2013 |
"Tables": "Създаване на таблици",
|
2014 |
+
"TablesCreatedSuccess": "Таблиците са създадени",
|
2015 |
"TablesDelete": "Изтрий съществуващите таблици",
|
2016 |
+
"TablesDeletedSuccess": "Съществуващите Matomo таблици бяха изтрити",
|
2017 |
+
"TablesFound": "Следните таблици бяха намерени в базата данни",
|
2018 |
"TablesReuse": "Използвай съществуващите таблици",
|
2019 |
+
"TablesUpdatedSuccess": "Базата данни е актуализирана от %1$s на %2$s!",
|
2020 |
+
"TablesWarningHelp": "Или изберете да използвате повторно съществуващите таблици на базата данни, или изберете чиста инсталация, за да изтриете всички съществуващи данни от базата данни.",
|
2021 |
+
"TablesWithSameNamesFound": "Някои таблици %1$s във Вашата база данни \"%2$s\" имат същите имена като таблиците, които Matomo се опитва да създаде",
|
2022 |
+
"Timezone": "Часова зона на уебсайта",
|
2023 |
+
"WeHopeYouWillEnjoyPiwik": "Насладете се на използването на Matomo толкова, колкото ние се радваме да го правим.",
|
2024 |
+
"Welcome": "Добре дошли",
|
2025 |
+
"WelcomeHelp": "<p>Matomo е безплатен софтуер, използван за анализ на трафика от Вашите посетители.<\/p><p>Този процес има %s стъпки и отнема около 5 минути.<\/p>",
|
2026 |
+
"WelcomeToCommunity": "Добре дошли в Matomo общността.",
|
2027 |
+
"YouMayInstallPiwikNow": "Можете да %1$sинсталирате Matomo сега%2$s"
|
2028 |
},
|
2029 |
"Intl": {
|
2030 |
"Continent_afr": "Африка",
|
3126 |
"Timezone_Pacific_Gambier": "Гамбие",
|
3127 |
"Timezone_Pacific_Honolulu": "Хонолулу",
|
3128 |
"Timezone_Pacific_Johnston": "Джонстън",
|
3129 |
+
"Timezone_Pacific_Kanton": "Kanton",
|
3130 |
"Timezone_Pacific_Kiritimati": "Киритимати",
|
3131 |
"Timezone_Pacific_Kosrae": "Кошрай",
|
3132 |
"Timezone_Pacific_Kwajalein": "Куаджалин",
|
3143 |
"Year_Short": "г.",
|
3144 |
"Yesterday": "Вчера"
|
3145 |
},
|
3146 |
+
"IntranetMeasurable": {
|
3147 |
+
"Intranet": "Интранет уебсайт",
|
3148 |
+
"IntranetDescription": "Измеримият интранет е точно като уебсайт, но се хоства във вътрешна мрежа.",
|
3149 |
+
"Intranets": "Интранет уебсайтове"
|
3150 |
+
},
|
3151 |
"LanguagesManager": {
|
3152 |
+
"AboutPiwikTranslations": "За Matomo преводите",
|
3153 |
+
"TranslationSearch": "Търсене на превод"
|
3154 |
},
|
3155 |
"Live": {
|
3156 |
+
"ActionsAndDuration": "%1$s действия в %2$s",
|
3157 |
"AveragePageGenerationTime": "Всяка страница отнема средно по %1$s, за да бъде заредена от този посетител.",
|
3158 |
+
"CalculatedOverNPageViews": "Изчислено с помощта на последните %1$s показвания на страница на този посетител.",
|
3159 |
+
"ClickToSeeAllContents": "Кликнете, за да видите всяко взаимодействие\/импресия със съдържание",
|
3160 |
+
"ClickToViewAllActions": "Кликнете, за да видите подробно всички действия на тази група",
|
3161 |
+
"ClickToViewMoreAboutVisit": "Кликнете, за да видите повече информация за това посещение",
|
3162 |
"ConvertedNGoals": "Конвертирани %s цели",
|
3163 |
+
"DisableVisitorProfile": "Деактивирайте само потребителския профил",
|
3164 |
+
"DisableVisitorProfileDescription": "Тук можете да деактивирате функцията на потребителския профил. Всички функции, свързани с лога за посещения, ще продължат да работят.",
|
3165 |
+
"DisableVisitsLogAndProfile": "Деактивирайте лога на посещенията и потребителския профил",
|
3166 |
+
"DisableVisitsLogAndProfileDescription": "Тук можете да деактивирате лога на посещенията и функцията на потребителския профил. Това също ще деактивира функции, които зависят от лога на електронната търговия, сегментирания лог на посещенията, картата в реално време или уиджета в реално време. Това може да е необходимо за спазване на местните закони\/указания за защита на данните.",
|
3167 |
"FirstVisit": "Първо посещение",
|
3168 |
"GoalType": "Тип",
|
3169 |
"HideMap": "скриване на картата",
|
3170 |
+
"KeywordRankedOnSearchResultForThisVisitor": "Ключовата дума %1$s беше класирана %2$s на страницата с резултати от търсенето %3$s за този посетител",
|
3171 |
"LastHours": "Последните %s часа",
|
3172 |
"LastMinutes": "Последните %s минути",
|
3173 |
"LastVisit": "Последно посещение",
|
3174 |
+
"LimitedSummary": "Информацията в този профил обобщава последните %1$s посещения. Този потребител е имал общо повече посещения.",
|
3175 |
+
"LimitedVisitsShown": "Показват се само последните %1$s посещения. Този потребител е имал общо повече посещения.",
|
3176 |
+
"LinkVisitorLog": "Вижте подробен лог на посещенията",
|
3177 |
"LoadMoreVisits": "Зареждане на повече посещения",
|
3178 |
"MorePagesNotDisplayed": "повечето страници от този посетител не се показват",
|
3179 |
"NbVisitor": "1 посетител",
|
3180 |
"NbVisitors": "%s посетители",
|
3181 |
"NextVisitor": "Следващ посетител",
|
3182 |
"NoMoreVisits": "Няма повече посещения за този посетител.",
|
3183 |
+
"OnClickPause": "%s се стартира. Кликнете за пауза.",
|
3184 |
+
"OnClickStart": "%s е спряно. Кликнете, за да започнете.",
|
3185 |
"PageRefreshed": "Броят пъти, които тази страница е гледана \/ обновена в ред.",
|
3186 |
+
"PluginDescription": "Предоставя лога на посетителите на живо и Ви позволява да гледате посетителите си в реално време в уиджета на таблото за управление. Плъгинът също така Ви позволява да видите профил на посетителя за всеки даден потребител.",
|
3187 |
"PreviousVisitor": "Предишен посетител",
|
3188 |
+
"QueryMaxExecutionTimeExceeded": "Изпълнението на заявката отне твърде дълго.",
|
3189 |
+
"QueryMaxExecutionTimeExceededReasonDateRange": "Това може да се случи, ако избраният период от време е твърде голям. Моля, опитайте да изберете по-малък период от време.",
|
3190 |
+
"QueryMaxExecutionTimeExceededReasonSegment": "Това може да се случи, ако избраният сегмент не съответства на нито едно посещение. Моля, проверете избрания от Вас сегмент.",
|
3191 |
+
"QueryMaxExecutionTimeExceededReasonUnknown": "Моля, опитайте отново. Ако това се случва многократно, моля, свържете се с администратор.",
|
3192 |
+
"RealTimeHelp1": "Отчетът за посещения в реално време показва потока от посещения в реално време на Вашия уебсайт. Той включва брояч в реално време на Вашите посещения и показвания на страници през последните 24 часа и предходните 30 минути.",
|
3193 |
+
"RealTimeHelp2": "Този отчет се опреснява на всеки 5 секунди и показва нови посещения (или съществуващи посетители, които преглеждат нова страница) в горната част на списъка с ефект на избледняване.",
|
3194 |
"RealTimeVisitorCount": "Броене на посетителите в реално време",
|
3195 |
+
"RealTimeVisitors": "Посещения в реално време",
|
3196 |
"Referrer_URL": "URL Референции",
|
3197 |
+
"RevisitedPages": "Страници, преглеждани повече от веднъж",
|
3198 |
+
"RowActionTooltipDefault": "Показване на лога на посещенията, сегментиран от този ред",
|
3199 |
+
"RowActionTooltipTitle": "Отворете сегментирания лог на посещенията",
|
3200 |
+
"RowActionTooltipWithDimension": "Показване на лога на посещенията, сегментиран от това %s",
|
3201 |
+
"SegmentedVisitorLogTitle": "Лог на посещенията, показващ посещения, където %1$s е \"%2$s\"",
|
3202 |
"ShowMap": "покажи картата",
|
3203 |
+
"SimpleRealTimeWidget_Message": "%1$s и %2$s в последните %3$s",
|
3204 |
+
"ToggleActions": "Превключете видимостта на всички действия",
|
3205 |
+
"TopVisitedPages": "Най-посещавани страници",
|
3206 |
"ViewVisitorProfile": "Преглед профила на посетителя",
|
3207 |
+
"VisitSummary": "Похарчихте общо %1$s%2$s на уебсайта %3$s и прегледахте %4$s страници %5$s при %6$s посещения %7$s.",
|
3208 |
+
"VisitSummaryWithActionDetails": "Похарчихте общо %1$s%2$s на уебсайта%3$s и извършихте %4$s действия %5$s (%6$s) при %7$s посещения %8$s.",
|
3209 |
"VisitedPages": "Посетени страници",
|
3210 |
+
"VisitorLog": "Лог на посещенията",
|
3211 |
"VisitorLogDocumentation": "Тази таблица показва последните посещения, включени в избраният обхват от време. Можете да видите кога се е случило последното посещение на посетител, като посочите върху датата на посещението. %1$s Ако обхвата на датата включва днешния ден, можете да видите вашите посетители в реално време! %2$s Информацията тук винаги е в реално време, независимо дали и колко често използвате инструментите за архивиране.",
|
3212 |
+
"VisitorLogNoDataMessagePurged": "Вероятно данните са изчистени, защото редовното изтриване на стари необработени данни е активирано и датата за този отчет е на повече от %s дни. Супер потребител може да промени тази настройка, като отиде на Администрация => Поверителност.",
|
3213 |
+
"VisitorLogSubcategoryHelp1": "Логът на посещенията Ви показва подробно всяко посещение, което Вашият уебсайт получава. Можете да видите какви действия е предприел всеки посетител, как е стигнал до Вашия сайт, информация за посетителя и други (като същевременно спазвате местните разпоредби за поверителност).",
|
3214 |
+
"VisitorLogSubcategoryHelp2": "Докато други отчети в Matomo показват как се държат Вашите посетители на обобщено ниво, логът на посещенията предоставя подробна информация. Можете също да използвате сегменти, за да го стесните до конкретни типове посещения, за да разберете по-добре посетителите си.",
|
3215 |
+
"VisitorLogSubcategoryHelp3": "Научете повече в ръководството за лог на посещенията.",
|
3216 |
"VisitorProfile": "Профил на посетителя",
|
3217 |
"VisitorsInRealTime": "Посещения в реално време",
|
3218 |
"VisitorsLastVisit": "Последното посещение от този посетител беше от преди %s дни.",
|
3219 |
+
"VisitsFrom": "%1$s%2$s посещения%3$s от",
|
3220 |
+
"VisitsLog": "Лог на посещенията"
|
3221 |
},
|
3222 |
"Login": {
|
3223 |
+
"BruteForceLog": "Лог за brute force атаки",
|
3224 |
+
"ChangeYourPassword": "Променете паролата си",
|
3225 |
+
"ConfirmPasswordReset": "Потвърдете нулиране на паролата",
|
3226 |
+
"ConfirmPasswordResetIntro": "За да потвърдите, че наистина Вие сте поискали тази промяна на паролата, моля, въведете новата си парола отново.",
|
3227 |
+
"ConfirmPasswordResetWrongPassword": "Въведената парола не съвпада с новата Ви парола. Ако не помните новоизбраната си парола, можете да нулирате паролата си отново. Ако не сте поискали промяна на паролата, просто не правете нищо и паролата Ви няма да бъде променена.",
|
3228 |
+
"ConfirmPasswordToContinue": "Потвърдете паролата си, за да продължите",
|
3229 |
"ConfirmationLinkSent": "Изпратена е връзка за потвърждение. Проверете пощенската си кутия, за да потвърдите заявката за смяна на парола.",
|
3230 |
+
"ContactAdmin": "Възможна причина: Вашият хост може да е деактивирал функцията mail(). <br>Моля, свържете се с администратор на Matomo.",
|
3231 |
+
"CurrentlyBlockedIPs": "В момента блокирани IP адреси",
|
3232 |
+
"CurrentlyBlockedIPsUnblockConfirm": "Наистина ли искате да деблокирате всички блокирани в момента IP адреси?",
|
3233 |
+
"CurrentlyBlockedIPsUnblockInfo": "Можете да деблокирате IP адреси, които в момента са блокирани, за да могат да влязат отново в случай, че са били грешно маркирани и трябва да могат да влязат отново.",
|
3234 |
+
"ExceptionInvalidSuperUserAccessAuthenticationMethod": "Потребител с ниво на достъп на супер потребител не може да бъде автентикиран с помощта на механизма „%s“.",
|
3235 |
"ExceptionPasswordMD5HashExpected": "Параметърът на паролата се очаква да бъде MD5 хеш на парола.",
|
3236 |
+
"HelpIpRange": "Въведете един IP адрес или един IP диапазон на ред. Можете да използвате CIDR нотация, напр. %1$s или можете да използвате заместващи знаци, напр. %2$s или %3$s",
|
3237 |
+
"IPsAlwaysBlocked": "Тези IP адреси винаги са блокирани",
|
3238 |
+
"InvalidNonceOrigin": "Неуспешна защита на формуляра, невалиден произход. Ако преди сте се свързвали чрез https, моля, уверете се, че се свързвате през защитена (SSL\/TLS) връзка и опитайте отново.",
|
3239 |
+
"InvalidNonceReferrer": "Защитата на формуляра не бе успешна, невалидна заглавка на препращащата информация. Ако използвате прокси сървър, трябва %1$s да конфигурирате Matomo да приема прокси header-a %2$s, който препраща header-a на хоста. Също така проверете дали header-а на Вашия Referrer (изпращач) е изпратена правилно и ако преди сте се свързвали чрез https, моля, уверете се, че се свързвате през защитена (SSL\/TLS) връзка и опитайте отново.",
|
3240 |
+
"InvalidNonceSSLMisconfigured": "Също така, можете да %1$s принудите Matomo да използва защитена връзка %2$s: във Вашия конфигурационен файл %3$s задайте %4$s под секция %5$s",
|
3241 |
+
"InvalidNonceToken": "Сигурността на формуляра не бе успешна, неточен токен. Моля, презаредете формуляра и проверете дали Вашите бисквитки са активирани.",
|
3242 |
+
"InvalidNonceUnexpectedReferrer": "Защитата на формуляра е неуспешна, заглавката (header) на препращащия адрес е различна от очакваната заглавка на препращащата информация, проверете дали заглавката на препращащия адрес е изпратена правилно.",
|
3243 |
+
"InvalidOrExpiredToken": "Token-ът е грешен или изтекъл.",
|
3244 |
+
"InvalidUsernameEmail": "Грешно потребителско име и\/или имейл адрес.",
|
3245 |
"LogIn": "Вход",
|
3246 |
+
"LoginNotAllowedBecauseBlocked": "В момента нямате право да влезете, защото сте имали твърде много неуспешни влизания, опитайте отново по-късно.",
|
3247 |
+
"LoginNotAllowedBecauseUserLoginBlocked": "Функционалността за влизане е временно деактивирана, тъй като има подозрително количество неуспешни опити за влизане през последния час.",
|
3248 |
+
"LoginOrEmail": "Потребителско име или имейл",
|
3249 |
+
"LoginPasswordNotCorrect": "Потребителското име и паролата не са верни.",
|
3250 |
"LostYourPassword": "Забравена парола?",
|
3251 |
+
"MailPasswordChangeBody2": "Здравейте %1$s,\n\nБеше получена заявка за нулиране на парола от %2$s. За да потвърдите тази заявка и за да можете да влезете с новите си идентификационни данни, моля, копирайте и поставете следната връзка във Вашия браузър:\n\n%3$s\n\nЗабележка: тази връзка ще изтече след 24 часа.\n\nБлагодарим Ви, че използвате Matomo!",
|
3252 |
"MailTopicPasswordChange": "Потвърждение смяната на паролата",
|
3253 |
+
"NewPassword": "Нова парола",
|
3254 |
+
"NewPasswordRepeat": "Нова парола (повторете)",
|
3255 |
+
"NotAllowListTakesPrecendence": "Ако IP съответства както на блокирания, така и на списъка \"никога не блокирай\", тогава списъкът с блокирани има предимство и IP няма да бъде разрешен.",
|
3256 |
"PasswordChanged": "Вашата парола е сменена.",
|
3257 |
"PasswordRepeat": "Парола (повторно)",
|
3258 |
+
"PasswordResetAlreadySent": "В последно време сте искали нулиране на паролата твърде често. Нова заявка може да се направи след един час. Ако имате проблеми с нулирането на паролата си, моля, свържете се с администратор за помощ.",
|
3259 |
"PasswordsDoNotMatch": "Паролите не съвпадат.",
|
3260 |
+
"PluginDescription": "Осигурява удостоверяване чрез потребителско име и парола, както и функция за нулиране на парола. Методът за удостоверяване може да бъде променен с помощта на друг плъгин за вход, като LoginLdap, наличен в Marketplace.",
|
3261 |
+
"RememberMe": "Запомни ме",
|
3262 |
+
"SettingBruteForceBlacklistIp": "Винаги блокирайте влизането на тези IP адреси",
|
3263 |
+
"SettingBruteForceEnable": "Активирайте откриването на Brute Force",
|
3264 |
+
"SettingBruteForceEnableHelp": "Откриването на Brute Force е важна функция за сигурност, използвана за защита на Вашите данни от неоторизиран достъп. Вместо да позволи на всеки потребител да изпробва хиляди или милиони комбинации от пароли за много кратко време, той ще позволи само определен брой неуспешни влизания в рамките на кратък период от време. Ако се появят твърде много неуспешни влизания в този период от време, потребителят няма да може да влезе, докато не изтече известно време. Моля, имайте предвид, че ако IP е блокиран, всеки потребител, който използва този IP, също ще бъде блокиран от влизане.",
|
3265 |
+
"SettingBruteForceMaxFailedLogins": "Брой разрешени опити за влизане във времеви диапазон",
|
3266 |
+
"SettingBruteForceMaxFailedLoginsHelp": "Ако повече от този брой неуспешни влизания са записани в рамките на конфигурирания по-долу времеви диапазон, блокирайте IP.",
|
3267 |
+
"SettingBruteForceTimeRange": "Брой на опитите за влизане в рамките на този интервал от време в минути",
|
3268 |
+
"SettingBruteForceTimeRangeHelp": "Въведете число в минути.",
|
3269 |
+
"SettingBruteForceWhitelistIp": "Никога не блокирайте влизането на тези IP адреси",
|
3270 |
+
"SuspiciousLoginAttemptsInLastHourEmail1": "Забелязахме подозрително голям брой опити за влизане във Вашия акаунт в Matomo през последния час, по-специално опити за влизане %1$s от %2$s различни IP адреси. Подозираме, че някой може да се опитва да проникне във Вашия акаунт.",
|
3271 |
+
"SuspiciousLoginAttemptsInLastHourEmail2": "За да защитите Вашето Matomo, препоръчваме да вземете следните предпазни мерки:",
|
3272 |
+
"SuspiciousLoginAttemptsInLastHourEmail3": "Уверете се, че паролата Ви е сигурна, произволна парола с подходяща дължина (например поне 30 знака).",
|
3273 |
+
"SuspiciousLoginAttemptsInLastHourEmail4": "Настройте двуфакторна автентикация, така че атакуващи хакери да се нуждаят от повече информация от Вашата парола, за да влязат.",
|
3274 |
+
"SuspiciousLoginAttemptsInLastHourEmail5": "Освен това, ако Вашето Matomo има ограничен набор от потребители или IP адреси, през които потребителите ще имат достъп до него, може да е полезно да настроите списък с разрешени IP адреси. %1$sПрочетете нашата документация за повече информация.%2$s",
|
3275 |
+
"SuspiciousLoginAttemptsInLastHourEmailSubject": "Забелязахме някои подозрителни опити за влизане във Вашия акаунт...",
|
3276 |
+
"UnblockAllIPs": "Деблокирайте всички блокирани в момента IP адреси",
|
3277 |
+
"WrongPasswordEntered": "Моля, въведете правилната си парола."
|
3278 |
},
|
3279 |
"Marketplace": {
|
3280 |
+
"ActionActivatePlugin": "Активирайте плъгин",
|
|
|
3281 |
"ActionActivateTheme": "Активирай тапет",
|
3282 |
"ActionInstall": "Инсталиране",
|
3283 |
+
"ActivateLicenseKey": "Активирай",
|
3284 |
+
"AddToCart": "Добавете в кошницата",
|
3285 |
+
"AllPaidPluginsInstalledAndActivated": "Всички платени плъгини бяха успешно инсталирани и активирани.",
|
3286 |
+
"AllowedUploadFormats": "Можете да качите плъгин или тема във формат .zip чрез тази страница.",
|
3287 |
"Authors": "Автори",
|
3288 |
+
"AutoUpdateDisabledWarning": "Не можете да инсталирате или актуализирате плъгина директно, тъй като автоматичните актуализации са деактивирани в конфигурацията. За да активирате автоматичните актуализации, задайте %1$s в %2$s.",
|
3289 |
"BackToMarketplace": "Връщане към магазина за приложения",
|
3290 |
+
"Browse": "Разглеждане",
|
3291 |
"BrowseMarketplace": "Разгледайте магазина",
|
3292 |
"ByXDevelopers": "от %s разработчици",
|
3293 |
+
"CannotInstall": "Не може да се инсталира",
|
3294 |
+
"CannotUpdate": "Не може да се актуализира",
|
3295 |
+
"ClickToCompletePurchase": "Кликнете, за да завършите покупката.",
|
3296 |
+
"ConfirmRemoveLicense": "Наистина ли искате да премахнете лицензния си ключ? Вече няма да получавате никакви актуализации за нито един от закупените от Вас плъгини.",
|
3297 |
+
"CurrentNumPiwikUsers": "Вашето Matomo в момента има %1$s регистрирани потребители.",
|
3298 |
"Developer": "Разработчик",
|
3299 |
+
"DevelopersLearnHowToDevelopPlugins": "Разработчици: Научете как можете да разширите и персонализирате Matomo чрез %1$sразработване на плъгини или теми%2$s.",
|
3300 |
+
"Exceeded": "Превишено",
|
3301 |
+
"ExceptionLinceseKeyIsExpired": "Този лицензен ключ е изтекъл.",
|
3302 |
+
"ExceptionLinceseKeyIsNotValid": "Този лицензен ключ не е валиден.",
|
3303 |
+
"FeaturedPlugin": "Препоръчан плъгин",
|
3304 |
+
"FreeTrialLabel": "Безплатен пробен период",
|
3305 |
+
"InstallAllPurchasedPlugins": "Инсталирайте всички закупени плъгини наведнъж",
|
3306 |
+
"InstallAllPurchasedPluginsAction": "Инсталирайте и активирайте закупените от %d плъгини",
|
3307 |
+
"InstallPurchasedPlugins": "Инсталирайте закупените плъгини",
|
3308 |
+
"InstallThesePlugins": "Това ще инсталира и активира следните плъгини:",
|
3309 |
+
"InstallingNewPluginViaMarketplaceOrUpload": "Можете автоматично да инсталирате %1$s от Marketplace или %2$s да качите %3$s%4$s във формат .zip.",
|
3310 |
"InstallingPlugin": "Инсталира се %s",
|
3311 |
"LastCommitTime": "(последен принос %s)",
|
3312 |
"LastUpdated": "Последно обновена",
|
3313 |
+
"LatestMarketplaceUpdates": "Последни актуализации в Marketplace",
|
3314 |
+
"License": "Лиценз",
|
3315 |
+
"LicenseExceeded": "Лицензът е надвишен",
|
3316 |
+
"LicenseExceededDescription": "Лицензите за следните плъгини вече не са валидни, тъй като броят на оторизираните потребители за лиценза е надвишен: %1$s. %2$sНяма да можете да изтегляте актуализации за тези плъгини. За да разрешите този проблем, или изтрийте някои потребители, или %3$sнадстройте абонамента сега%4$s.",
|
3317 |
+
"LicenseExceededPossibleCause": "Лицензът е надвишен. Вероятно има повече потребители на тази инсталация на Matomo, отколкото разрешава абонаментът.",
|
3318 |
+
"LicenseExpired": "Лицензът е изтекъл",
|
3319 |
+
"LicenseExpiredDescription": "Лицензите за следните плъгини са изтекли: %1$s. %2$sВече няма да получавате никакви актуализации за тези плъгини. За да разрешите този проблем, или %3$sподновете абонамента си сега%4$s, или деактивирайте плъгина, ако вече не го използвате.",
|
3320 |
+
"LicenseKey": "Лицензионен ключ",
|
3321 |
+
"LicenseKeyActivatedSuccess": "Лицензионният ключ е активиран успешно!",
|
3322 |
+
"LicenseKeyDeletedSuccess": "Лицензионният ключ е изтрит успешно.",
|
3323 |
+
"LicenseKeyExpiresSoon": "Вашият лицензионен ключ изтича скоро, моля, свържете се с %1$s.",
|
3324 |
+
"LicenseKeyIsExpired": "Вашият лицензионен ключ е изтекъл, моля свържете се с %1$s.",
|
3325 |
+
"LicenseKeyIsValidShort": "Лицензионният ключ е валиден!",
|
3326 |
+
"LicenseMissing": "Липсва лиценз",
|
3327 |
+
"LicenseMissingDeactivatedDescription": "Следните плъгини са деактивирани, защото ги използвате без лиценз: %1$s. %2$sЗа да разрешите този проблем или актуализирайте лицензния си ключ, %3$s вземете абонамент сега%4$s или деактивирайте плъгина.",
|
3328 |
+
"LicenseRenewsNextPaymentDate": "Подновява се на следващото плащане",
|
3329 |
+
"Marketplace": "Магазин",
|
3330 |
+
"MultiServerEnvironmentWarning": "Не можете да инсталирате или актуализирате плъгина директно, тъй като използвате Matomo на множество сървъри. Плъгинът ще бъде инсталиран само на един сървър. Вместо това изтеглете плъгина и го разположете ръчно на всичките си сървъри.",
|
3331 |
+
"NewVersion": "нова версия",
|
3332 |
+
"NoPluginsFound": "Не са намерени плъгини",
|
3333 |
+
"NoSubscriptionsFound": "Няма намерени абонаменти",
|
3334 |
"NoThemesFound": "Не са намерени тапети",
|
3335 |
+
"NoValidSubscriptionNoUpdates": "След като абонаментът изтече, вече няма да получавате никакви актуализации за този плъгин.",
|
3336 |
+
"NotAllowedToBrowseMarketplacePlugins": "Може да разгледате списъка с плъгини, които могат да бъдат инсталирани, за да настроите или разширите Вашата Matomo платформа. Моля, свържете се със системен администратор, ако желаете да бъде инсталирана някой плъгин.",
|
3337 |
+
"NotAllowedToBrowseMarketplaceThemes": "Може да разгледате списъка с тапети, които могат да бъдат инсталирани, за да променят изгледа на Matomo. Моля, свържете се с вашия системен администратор, за да извърши инсталацията им.",
|
3338 |
+
"NoticeRemoveMarketplaceFromReportingMenu": "Можете да премахнете Marketplace от менюто за отчитане, като инсталирате плъгина %1$sWhite Label%2$s.",
|
3339 |
"NumDownloadsLatestVersion": "Последна версия:%s сваляния",
|
3340 |
+
"OnlySomePaidPluginsInstalledAndActivated": "Някои платени плъгини не бяха инсталирани успешно.",
|
3341 |
+
"OverviewPluginSubscriptions": "Преглед на Вашите абонаменти за плъгини",
|
3342 |
+
"OverviewPluginSubscriptionsAllDetails": "За да видите всички подробности или да промените абонамент, влезте в акаунта си.",
|
3343 |
+
"OverviewPluginSubscriptionsMissingInfo": "Възможно е да липсва абонамент, например ако плащането все още не е извършено. В такъв случай опитайте отново след няколко часа или се свържете с екипа на Matomo.",
|
3344 |
+
"OverviewPluginSubscriptionsMissingLicense": "Нямате набор от лицензионни ключове. Ако сте закупили абонамент за плъгин, отидете на %1$sMarketplace%2$s и въведете лицензния си ключ.",
|
3345 |
+
"PaidPlugins": "Премиум функции",
|
3346 |
+
"PaidPluginsNoLicenseKeyIntro": "Ако сте закупили %1$sпремиум платен плъгин%2$s, моля, поставете получения лицензен ключ по-долу.",
|
3347 |
+
"PaidPluginsNoLicenseKeyIntroNoSuperUserAccess": "В случай, че сте закупили %1$sпремиум платен плъгин%2$s на Marketplace, моля, помолете потребител с достъп до супер потребител да добави лицензния ключ.",
|
3348 |
+
"PaidPluginsWithLicenseKeyIntro": "Настроен е валиден лицензен ключ. От съображения за сигурност тук не показваме лицензния ключ. Ако сте загубили лицензния си ключ, моля, свържете се с екипа на Matomo.",
|
3349 |
+
"PluginDescription": "Разширете и разширете функционалността на Matomo в Marketplace чрез изтегляне на плъгини и теми.",
|
3350 |
"PluginKeywords": "Ключови думи",
|
3351 |
+
"PluginLicenseExceededDescription": "Нямате право да изтегляте този плъгин. Лицензът за този плъгин вече не е валиден, тъй като броят на оторизираните потребители за лиценза е надвишен. За да разрешите този проблем, или изтрийте някои потребители, или надградете абонамента си сега.",
|
3352 |
+
"PluginLicenseMissingDescription": "Нямате право да изтегляте този плъгин, защото няма лиценз за него. За да разрешите този проблем, актуализирайте лицензния си ключ, вземете абонамент или деинсталирайте плъгина.",
|
3353 |
+
"PluginSubscriptionsList": "Това е списък с абонаменти, свързани с Вашия лицензен ключ.",
|
3354 |
"PluginUpdateAvailable": "Използва се версия %1$s и е налична нова версия %2$s.",
|
3355 |
+
"PluginUploadDisabled": "Качването на плъгин е деактивирано в конфигурационния файл. За да активирате тази функция, моля, актуализирайте конфигурацията си или се свържете с администратор",
|
3356 |
"PluginVersionInfo": "%1$s от %2$s",
|
3357 |
+
"PluginWebsite": "Сайт за плъгини",
|
3358 |
+
"PriceExclTax": "%1$s %2$s изкл. данък.",
|
3359 |
+
"PriceFromPerPeriod": "От %1$s \/ %2$s",
|
3360 |
+
"RemoveLicenseKey": "Премахнете лицензионния ключ",
|
3361 |
+
"Reviews": "Отзиви",
|
3362 |
"Screenshots": "Екранни снимки",
|
3363 |
+
"Show": "Покажи",
|
3364 |
+
"ShownPriceIsExclTax": "Показаната цена е без данък.",
|
3365 |
+
"Sort": "Сортиране",
|
3366 |
+
"SortByAlpha": "По азбучен ред",
|
3367 |
+
"SortByLastUpdated": "Последна актуализация",
|
3368 |
+
"SortByNewest": "Най-нови",
|
3369 |
+
"SortByPopular": "Популярни",
|
3370 |
+
"SpecialOffer": "Специална оферта",
|
3371 |
+
"StepDownloadingPluginFromMarketplace": "Изтегляне на плъгин от магазина (Marketplace)",
|
3372 |
"StepDownloadingThemeFromMarketplace": "Сваляне на тапет от магазина за приложения",
|
3373 |
+
"StepPluginSuccessfullyInstalled": "Успешно инсталирахте плъгина %1$s %2$s.",
|
3374 |
+
"StepPluginSuccessfullyUpdated": "Успешно актуализирахте плъгина %1$s %2$s.",
|
3375 |
+
"StepReplaceExistingPlugin": "Подмяна на съществуващ плъгин",
|
|
|
|
|
|
|
3376 |
"StepReplaceExistingTheme": "Замяна на съществуващ тапет",
|
3377 |
+
"StepThemeSuccessfullyInstalled": "Вие успешно инсталирахте тапет %1$s %2$s.",
|
3378 |
"StepThemeSuccessfullyUpdated": "Вие успешно обновихте тапет %1$s %2$s.",
|
3379 |
+
"StepUnzippingPlugin": "Разархивиране на плъгин",
|
3380 |
+
"StepUnzippingTheme": "Тапетът се разархивира",
|
3381 |
+
"SubscriptionEndDate": "Крайна дата",
|
3382 |
+
"SubscriptionExpiresSoon": "Този абонамент изтича скоро",
|
3383 |
+
"SubscriptionInvalid": "Този абонамент е невалиден или изтекъл",
|
3384 |
+
"SubscriptionNextPaymentDate": "Следваща дата на плащане",
|
3385 |
+
"SubscriptionStartDate": "Начална дата",
|
3386 |
"SubscriptionType": "Тип",
|
3387 |
"Support": "Поддръжка",
|
3388 |
+
"SupportMatomoThankYou": "Всяка покупка ще помогне за финансирането на бъдещето на проекта с отворен код Matomo. Благодарим Ви за подкрепата!",
|
3389 |
"TeaserExtendPiwikByUpload": "Разширяване на възможностите на Matomo, чрез добавяне на zip файл",
|
3390 |
+
"TrialHints": "Всички премиум функции идват с %1$sбезплатна 30-дневна пробна версия%2$s. Този пробен период е безрисков и няма ограничения.",
|
3391 |
+
"TryFreeTrialTitle": "Тогава опитайте 30 дни безплатно",
|
3392 |
"Updated": "Обновени",
|
3393 |
+
"UpdatingPlugin": "Актуализиране на %1$s",
|
3394 |
+
"UpgradeSubscription": "Надграждане на абонамент",
|
3395 |
"UploadZipFile": "Качване на zip файл",
|
3396 |
+
"ViewRepositoryChangelog": "Преглед на промените",
|
3397 |
+
"ViewSubscriptions": "Преглед на абонаментите",
|
3398 |
+
"ViewSubscriptionsSummary": "%1$sПреглед на Вашите абонаменти за плъгини.%2$s"
|
3399 |
+
},
|
3400 |
+
"MobileAppMeasurable": {
|
3401 |
+
"MobileApp": "Мобилно приложение",
|
3402 |
+
"MobileAppDescription": "Мобилно приложение за iOS, Android или всяка друга мобилна операционна система.",
|
3403 |
+
"MobileApps": "Мобилни приложения"
|
3404 |
},
|
3405 |
"MobileMessaging": {
|
3406 |
+
"Available_Credits": "Налични кредити: %1$s",
|
3407 |
"Exception_UnknownProvider": "Името на доставчика '%1$s' е неизвестно. Пробвайте друго име вместо: %2$s.",
|
3408 |
"MobileReport_AdditionalPhoneNumbers": "Могат да бъдат добавени повече телефонни номера достъпвайки",
|
3409 |
"MobileReport_MobileMessagingSettingsLink": "Страницата за настройка на мобилните съобщения",
|
3410 |
"MobileReport_NoPhoneNumbers": "Моля, активирайте поне един телефонен номер, достъпвайки",
|
3411 |
+
"MultiSites_Must_Be_Activated": "За да генерирате SMS текстове със статистиката на Вашия уебсайт, моля, активирайте плъгина MultiSites в Matomo.",
|
3412 |
"PhoneNumbers": "Телефонни номера",
|
3413 |
+
"PluginDescription": "Създавайте и изтегляйте персонализирани SMS отчети и ги изпращайте до мобилния си телефон на дневна, седмична или месечна база.",
|
3414 |
+
"SMS_Content_Too_Long": "[твърде дълго]",
|
3415 |
+
"SettingsMenu": "Мобилни съобщения",
|
3416 |
"Settings_APIKey": "API ключ",
|
3417 |
"Settings_CountryCode": "Код на държавата",
|
3418 |
+
"Settings_CredentialInvalid": "Вашият %1$s SMS API акаунт е конфигуриран, но възникна грешка при опит за получаване на наличните кредити.",
|
3419 |
"Settings_CredentialNotProvided": "Преди да можете да създавате и управлявате телефонни номера, моля свържете Matomo с вашия SMS профил по-горе.",
|
3420 |
"Settings_CredentialNotProvidedByAdmin": "Преди да можете да добавяте и управлявате телефонни номера, моля, свържете се с вашия администратор, за да свърже Matomo с SMS профил.",
|
3421 |
"Settings_CredentialProvided": "Вашият %s SMS приложно-програмен интерфейсен профил е правилно настроен!",
|
3422 |
+
"Settings_DelegatedPhoneNumbersOnlyUsedByYou": "Конфигурираните телефонни номера могат да се виждат и използват само от Вас, а не от други потребители.",
|
3423 |
"Settings_DelegatedSmsProviderOnlyAppliesToYou": "Така посоченият доставчик на SMS услуги ще бъде ползван само от вас. Други потребители няма да могат да го ползват.",
|
3424 |
+
"Settings_DeleteAccountConfirm": "Сигурни ли сте, че искате да изтриете този SMS профил?",
|
3425 |
+
"Settings_EnterActivationCode": "Въведете код за активиране",
|
3426 |
"Settings_InvalidActivationCode": "Въведеният код не е валиден, моля опитайте отново.",
|
3427 |
"Settings_LetUsersManageAPICredential": "Позволява на потребителите да управляват своите собствени идентификационни данни за SMS API",
|
3428 |
+
"Settings_LetUsersManageAPICredential_No_Help": "Всички потребители могат да получават SMS отчети и ще използват кредитите на Вашия акаунт.",
|
3429 |
+
"Settings_LetUsersManageAPICredential_Yes_Help": "Всеки потребител ще може да създаде свой собствен SMS API акаунт и няма да използва Вашия кредит.",
|
3430 |
"Settings_ManagePhoneNumbers": "Управление на телефонните номера",
|
3431 |
"Settings_PhoneActivated": "Телефонният номер е потвърден! Вече имате възможност да получавате кратки съобщения (SMS) с вашите статистики.",
|
3432 |
"Settings_PhoneNumber": "Телефонен номер",
|
3433 |
"Settings_PhoneNumbers_Add": "Добави нов телефонен номер",
|
3434 |
+
"Settings_PhoneNumbers_CountryCode_Help": "Ако не знаете телефонния код на държавата, потърсете я тук.",
|
3435 |
+
"Settings_PhoneNumbers_Help": "Преди да получавате SMS (текстови съобщения) отчети на телефон, телефонният номер трябва да бъде въведен по-долу.",
|
3436 |
+
"Settings_PhoneNumbers_HelpAdd": "Когато кликнете върху „Добавяне“, на телефона ще бъде изпратен SMS, съдържащ код. След това потребителят, който получава кода, трябва да влезе в Matomo, да кликне върху Настройки и след това върху Mobile Messaging. След като въведе кода, потребителят ще може да получава текстови отчети на телефона си.",
|
3437 |
+
"Settings_PleaseSignUp": "За да създавате SMS отчети и да получавате кратки текстови съобщения със статистика на Вашите уебсайтове на мобилния си телефон, моля, регистрирайте се с API за SMS и въведете информацията си по-долу.",
|
3438 |
"Settings_SMSAPIAccount": "Управление на профила за SMS приложно-програмен интерфейс",
|
3439 |
"Settings_SMSProvider": "Доставчик на SMS услуги",
|
3440 |
+
"Settings_SelectCountry": "Изберете държава",
|
3441 |
"Settings_SuperAdmin": "Настройки на супер потребителя",
|
3442 |
"Settings_SuspiciousPhoneNumber": "Ако не получите текстовото съобщение, може да опитате без водещата нула. т.е. %s",
|
3443 |
"Settings_UpdateOrDeleteAccount": "%1$sОбновяване%2$s или %3$sизтриване%4$s на този профил.",
|
3444 |
"Settings_ValidatePhoneNumber": "Валидиране",
|
3445 |
"Settings_VerificationCodeJustSent": "Изпратихме ви код със SMS на посочения номер, моля, въведете кода по-горе и натиснете \"Валидиране\".",
|
3446 |
+
"TopLinkTooltip": "Вземете Web Analytics Reports доставен във Вашата пощенска кутия или във Вашия мобилен телефон.",
|
|
|
3447 |
"TopMenu": "Доклади по имейл и SMS",
|
3448 |
+
"UserKey": "Потребителски ключ",
|
3449 |
+
"VerificationText": "Кодът е %1$s. За да потвърдите Вашия телефонен номер и да получите Matomo SMS отчети, моля, копирайте този код във формата достъпна чрез Matomo > %2$s > %3$s."
|
3450 |
},
|
3451 |
"MultiSites": {
|
3452 |
+
"AllWebsitesDashboardDocumentation": "Този отчет Ви дава информационен преглед за всеки от Вашите уебсайтове, съдържащ най-общите показатели за Вашите посетители.",
|
3453 |
"Evolution": "Развитие",
|
3454 |
+
"EvolutionComparisonDay": "%1$s %2$s този ден в сравнение с %3$s %2$s в предходния частичен период (%4$s) Развитие: %5$s",
|
3455 |
+
"EvolutionComparisonIncomplete": "Текущо избраният период от време е %1$s завършен.",
|
3456 |
+
"EvolutionComparisonMonth": "%1$s %2$s този месец в сравнение с %3$s %2$s в предходния частичен период (%4$s) Развитие: %5$s",
|
3457 |
+
"EvolutionComparisonProportional": "Когато предишният период също беше %1$s завършен, имаше приблизително %2$s %3$s\n (от общо %4$s %3$s през предходния период).",
|
3458 |
+
"EvolutionComparisonWeek": "%1$s %2$s тази седмица в сравнение с %3$s %2$s в предходния частичен период (%4$s) Развитие: %5$s",
|
3459 |
+
"EvolutionComparisonYear": "%1$s %2$s тази година в сравнение с %3$s %2$s в предходния частичен период (%4$s) Развитие: %5$s",
|
3460 |
"LoadingWebsites": "Зарежда сайтовете",
|
3461 |
+
"PluginDescription": "Преглеждайте и сравнявайте всичките си уебсайтове и приложения в таблото за управление „Всички уебсайтове“.",
|
3462 |
+
"SingleWebsitesDashboardDocumentation": "Този отчет Ви дава информационен преглед за конкретен уебсайт, съдържащ най-общите показатели за Вашите посетители.",
|
3463 |
"TopLinkTooltip": "Сравнете статистиката за всички ваши уебсайтове."
|
3464 |
},
|
3465 |
"Overlay": {
|
3466 |
"Clicks": "%s клика",
|
3467 |
+
"ClicksFromXLinks": "%1$s кликвания от една от %2$s връзките",
|
3468 |
"Domain": "Домейн",
|
3469 |
+
"ErrorNoSiteUrls": "ПРЕДУПРЕЖДЕНИЕ: Този уебсайт няма URL адреси на сайтове, дефинирани в Matomo. Това може да доведе до нарушаване на наслагването и други функции или странно поведение. За да коригирате това, добавете URL в настройките за този уебсайт в секцията Matomo Администриране.",
|
3470 |
+
"ErrorNotLoading": "Сесията за наслагване на страница все още не може да бъде стартирана.",
|
3471 |
"ErrorNotLoadingDetails": "Възможно е заредената страница вдясно да няма последяващия Matomo код. В този случай опитайте да стартирате нова връзка за различна страница от доклада на страници.",
|
3472 |
+
"ErrorNotLoadingDetailsSSL": "Тъй като използвате Matomo през https, най-вероятната причина е, че уебсайтът Ви не поддържа SSL. Опитайте да използвате Matomo през http.",
|
3473 |
+
"ErrorNotLoadingLink": "Кликвайки тук, ще получите повече съвети за отстраняване на проблеми",
|
3474 |
"Link": "Връзка",
|
3475 |
"Location": "Местоположение",
|
3476 |
"NoData": "Няма данни за тази страница по време на избрания период.",
|
3477 |
"OneClick": "1 клик",
|
3478 |
"OpenFullScreen": "Цял екран (без странична лента)",
|
3479 |
+
"Overlay": "Наслояване на страница",
|
3480 |
+
"PluginDescription": "Вижте Вашите аналитични данни като наслагване на действителния си уебсайт. Вижте колко пъти Вашите потребители са кликнали върху всяка връзка. Забележка: Изисква активиран плъгин Transitions.",
|
3481 |
+
"RedirectUrlError": "Опитвате се да отворите Page Overlay за URL адреса „%1$s“. %2$s Нито един от домейните от настройките на Matomo не съответства на връзката.",
|
3482 |
"RedirectUrlErrorAdmin": "Може да добавите домейнът като допълнителен адрес %1$sв настройките%2$s.",
|
3483 |
"RedirectUrlErrorUser": "Попитайте вашият администратор да добави домейна, като допълнителен URL."
|
3484 |
},
|
3485 |
"PagePerformance": {
|
3486 |
+
"ColumnAveragePageLoadTime": "Средно време за зареждане на страница",
|
3487 |
+
"ColumnAveragePageLoadTimeDocumentation": "Средно време (в секунди), което отнема от заявката за страница до пълното й изобразяване в браузъра",
|
3488 |
+
"ColumnAverageTimeDomCompletion": "Ср. време за завършване на DOM",
|
3489 |
+
"ColumnAverageTimeDomCompletionDocumentation": "Средно време (в секунди), необходимо на браузъра да зареди медията и да изпълни всеки JavaScript код, слушащ събитието DOMContentLoaded, след като уеб страницата е била заредена и потребителят вече може да взаимодейства с нея.",
|
3490 |
+
"ColumnAverageTimeDomProcessing": "Ср. време за обработка на DOM",
|
3491 |
+
"ColumnAverageTimeDomProcessingDocumentation": "Средно време (в секунди), което браузърът прекарва в зареждане на уеб страницата, след като отговорът е бил напълно получен и преди потребителят да започне да взаимодейства с нея.",
|
3492 |
+
"ColumnAverageTimeNetwork": "Ср. мрежово време",
|
3493 |
+
"ColumnAverageTimeNetworkDocumentation": "Средно време (в секунди), необходимо за свързване със сървъра. Това включва времето, необходимо за справка за DNS и установяване на TCP връзка. Тази стойност може да е 0 след първото искане към домейн, т.к. браузърът може да кешира връзката.",
|
3494 |
+
"ColumnAverageTimeOnLoad": "Ср. време за зареждане",
|
3495 |
+
"ColumnAverageTimeOnLoadDocumentation": "Средно време (в секунди), необходимо на браузъра да изпълни JavaScript код в изчакване на събитието window.load. Това събитие се задейства, след като DOM се изобрази напълно.",
|
3496 |
+
"ColumnAverageTimeServer": "Ср. сървърно време",
|
3497 |
+
"ColumnAverageTimeServerDocumentation": "Средно време (в секунди), необходимо на сървъра за генериране на страницата. Това е времето между получаването на заявката от сървъра и започването на обслужването на отговора.",
|
3498 |
+
"ColumnAverageTimeTransfer": "Ср. време за трансфер",
|
3499 |
+
"ColumnAverageTimeTransferDocumentation": "Средно време (в секунди), необходимо на браузъра, за да изтегли отговора от сървъра. Това е времето от получаване на първия байт до завършване на отговора.",
|
3500 |
+
"ColumnTimeDomCompletion": "Време за завършване на DOM",
|
3501 |
+
"ColumnTimeDomProcessing": "Време за обработка на DOM",
|
3502 |
+
"ColumnTimeNetwork": "Мрежово време",
|
3503 |
+
"ColumnTimeOnLoad": "Време на зареждане",
|
3504 |
+
"ColumnTimeServer": "Сървърно време (на сървъра)",
|
3505 |
+
"ColumnTimeTransfer": "Време за трансфер",
|
3506 |
+
"ColumnViewsWithTimeDomCompletion": "Показвания на страници с време за завършване на DOM",
|
3507 |
+
"ColumnViewsWithTimeDomProcessing": "Показвания на страници с време за обработка на DOM",
|
3508 |
+
"ColumnViewsWithTimeNetwork": "Показвания на страници с мрежово време",
|
3509 |
+
"ColumnViewsWithTimeOnLoad": "Показвания на страници с време за зареждане",
|
3510 |
+
"ColumnViewsWithTimeServer": "Показвания на страници със сървърно време",
|
3511 |
+
"ColumnViewsWithTimeTransfer": "Показвания на страници с време за трансфер",
|
3512 |
+
"EvolutionOverPeriod": "Развитие на показателите за ефективност на страницата",
|
3513 |
+
"HelpNote": "Някои от тези показатели може да не са винаги налични. Можете да намерите повече информация в нашето %1$sонлайн ръководство%2$s.",
|
3514 |
+
"Overview": "Общ преглед на производителността",
|
3515 |
+
"OverviewDocumentation": "Този отчет предоставя общ преглед на това колко бързо Вашите уеб страници стават видими за посетителите Ви. Това включва както време, необходимо на браузърите да изтеглят Вашите уеб страници, така и колко време отнема на браузърите да ги покажат.",
|
3516 |
+
"PageLoadTime": "Време за зареждане на страницата",
|
3517 |
+
"PagePerformanceTitle": "Производителност на страница с %1$s \"%2$s\"",
|
3518 |
+
"Performance": "Производителност",
|
3519 |
+
"PerformanceSubcategoryHelp1": "Разделът за производителност може да Ви помогне да анализирате колко бързо се представят уебсайтът или приложението Ви като цяло и да Ви помогне да откриете дали имате конкретни страници, които значително се отклоняват от средните Ви стойности.",
|
3520 |
+
"PerformanceSubcategoryHelp2": "Можете също да намерите отчети, показващи точно колко време отнема зареждането на всяка страница от Вашия уебсайт и какво допринася за времето за зареждане.",
|
3521 |
+
"PerformanceTable": "Таблица с показатели за производителност",
|
3522 |
+
"PluginDescription": "Добавя някои отчети за производителността на страниците",
|
3523 |
+
"RowActionDescription": "Показване на отчет за производителността на страницата за този ред",
|
3524 |
+
"RowActionTitle": "Отворете отчета за производителността на страницата"
|
3525 |
},
|
3526 |
"PrivacyManager": {
|
3527 |
+
"AddUserIdToSearch": "Кликнете, за да добавите този потребителски идентификатор към търсенето",
|
3528 |
+
"AddVisitorIPToSearch": "Кликнете, за да добавите този IP адрес на посетителя към търсенето",
|
3529 |
+
"AddVisitorIdToSearch": "Кликнете, за да добавите този идентификатор на посетителя към търсенето",
|
3530 |
+
"AnonymizeData": "Анонимизирай данни",
|
3531 |
+
"AnonymizeDataConfirm": "Наистина ли искате да анонимизирате данните за избрания(ите) уебсайт(ове) и времеви диапазон? Това действие не може да бъде отменено, данните може да бъдат изтрити, както е поискано, и този процес може да отнеме много време.",
|
3532 |
+
"AnonymizeDataNow": "Анонимизирайте минали данни за избрания сайт и време",
|
3533 |
+
"AnonymizeIp": "Анонимизирайте IP",
|
3534 |
+
"AnonymizeIpDescription": "Изберете \"Да\", ако искате Matomo да не проследява напълно квалифицирани IP адреси.",
|
3535 |
+
"AnonymizeIpExtendedHelp": "Когато потребителите посетят Вашия уебсайт, Matomo няма да използва пълния IP адрес (като %1$s), а вместо това Matomo първо ще го анонимизира (до %2$s). Анонимизирането на IP адреса е едно от изискванията, определени от законите за поверителност в някои страни като Германия.",
|
3536 |
+
"AnonymizeIpHelp": "Това действие не може да бъде отменено. Ако е активирано, за всички посещения през тази продължителност IP ще бъде анонимизиран с поне 2 байта, например '192.168.xxx.xxx'. Ако в момента сте конфигурирали да анонимизирате с 3 байта, тогава тази настройка ще бъде спазена и всички IP адреси ще бъдат анонимизирани с 3 байта.",
|
3537 |
"AnonymizeIpInlineHelp": "Скрива последните цифри на IP адреса на посетителя, за да бъде спазен закона за поверителност.",
|
3538 |
+
"AnonymizeIpMaskFully": "Пълно маскиране на IP адрес",
|
3539 |
"AnonymizeIpMaskLengtDescription": "Изберете колко байта от IP на посетителите да е маскирано.",
|
3540 |
"AnonymizeIpMaskLength": "%1$s байта - пример %2$s",
|
3541 |
+
"AnonymizeLocation": "Анонимизиране на местоположението",
|
3542 |
+
"AnonymizeLocationHelp": "Това действие не може да бъде отменено. Преоценява местоположението въз основа на анонимизирания IP (поне 2 байта от IP ще бъдат анонимизирани).",
|
3543 |
+
"AnonymizeOrderIdNote": "Тъй като идентификационният номер на поръчката може да бъде препратен с друга система, обикновено магазин за електронна търговия, идентификационният номер на поръчката може да се счита за лична информация съгласно GDPR. Когато активирате тази опция, идентификатор на поръчката ще бъде автоматично анонимизиран, така че няма да се проследява лична информация.",
|
3544 |
+
"AnonymizeProcessInfo": "Това действие може да отнеме много време и следователно няма да бъде изпълнено веднага. Ще можете да проследите текущото състояние на процеса по-долу. Анонимизирането обикновено трябва да започне в рамките на един час.",
|
3545 |
+
"AnonymizeReferrer": "Анонимизирайте препращащия",
|
3546 |
+
"AnonymizeReferrerExcludeAll": "Не записвайте препращащия URL адрес, но все пак откривайте типа на препращащия",
|
3547 |
+
"AnonymizeReferrerExcludeNone": "Не анонимизирайте препращача",
|
3548 |
+
"AnonymizeReferrerExcludePath": "Запазете само домейна на препращащ URL адрес",
|
3549 |
+
"AnonymizeReferrerExcludeQuery": "Премахнете параметрите на заявката от препращащия URL адрес",
|
3550 |
+
"AnonymizeReferrerNote": "Matomo съхранява от кой URL адрес (препращащ адрес) потребителят идва на Вашия сайт. В някои случаи такъв URL може да съдържа информация, която може да се счита за лична информация. Ако искате да предотвратите проследяването на такава информация, можете да ограничите количеството референтни данни, които Matomo ще съхранява, когато посетител влезе във Вашия уебсайт. Колкото повече информация бъде премахната от препращащата информация, толкова по-малко вероятно е личната информация да бъде записана. Колкото повече информация премахнете от препращащия, толкова по-малко ясно ще бъде как посетителят е стигнал до Вашия уебсайт.",
|
3551 |
+
"AnonymizeRowDataFrom": "Анонимизирайте всички необработени данни, започвайки от:",
|
3552 |
+
"AnonymizeRowDataTo": "Анонимизирайте всички необработени данни до:",
|
3553 |
+
"AnonymizeSites": "Анонимизирайте данните на този сайт(ове)",
|
3554 |
+
"AnonymizeUserId": "Заменете User ID с псевдоним",
|
3555 |
+
"AnonymizeUserIdHelp": "Когато активирате тази опция, потребителският идентификатор ще бъде заменен с псевдоним, за да се избегне директно съхраняване и показване на лична информация, като например имейл адрес. В технически термини: като се има предвид Вашето потребителско име, Matomo ще обработи псевдонима на потребителския идентификатор с помощта на осолена хеш функция.<br><br><em>Забележка: замяната с псевдоним не е същото като анонимизиране. Съгласно GDPR: псевдонимът User ID все още се брои като лични данни. Оригиналният потребителски идентификатор все още може да бъде идентифициран, ако е налична определена допълнителна информация (до която само Matomo и Вашият обработващ данни имат достъп).<\/em>",
|
3556 |
+
"AskingForConsent": "Искане на съгласие",
|
3557 |
+
"AwarenessDocumentation": "Осведоменост и документация",
|
3558 |
+
"AwarenessDocumentationDesc1": "Информирайте посетителите си чрез ясно съобщение за поверителност, когато събирате лични данни.",
|
3559 |
+
"AwarenessDocumentationDesc2": "Информирайте потребителите си във Вашата политика за поверителност какви данни събирате и как се използват данните.",
|
3560 |
+
"AwarenessDocumentationDesc3": "Уведомете екипа си, че използвате Matomo Analytics и %1$sкакви данни се събират от Вашата платформа за анализ %2$s.",
|
3561 |
+
"AwarenessDocumentationDesc4": "Документирайте използването на Matomo във Вашия %1$s регистър на информационните активи %2$s.",
|
3562 |
+
"AwarenessDocumentationIntro": "Информирайте своите потребители ясно и прозрачно и информирайте колегите си за събираните данни и как се използват:",
|
3563 |
+
"BackgroundColor": "Цвят на фона",
|
3564 |
"ClickHereSettings": "Натиснете тук, за да влезете в %s настройките.",
|
3565 |
+
"ConsentExplanation": "Съгласието означава да се предложи на хората избор и контрол върху това как се обработват личните им данни.",
|
3566 |
"CurrentDBSize": "Настоящ размер на базата данни",
|
3567 |
"DBPurged": "Базата от данни е изтрита.",
|
3568 |
+
"DataRetention": "Запазване на данни",
|
3569 |
+
"DataRetentionInMatomo": "Запазване на данни, съхранявани в Matomo:",
|
3570 |
+
"DataRetentionOverall": "Общият процент на задържане на данни за Вашата политика за поверителност е процентът на задържане на необработени данни. Моля, имайте предвид, че обобщените отчети могат да съдържат и лични данни. Ако използвате функции като идентификатор на потребител, персонализирани променливи, персонализирана величина или проследявате лични данни по други начини, като събития, URL адреси на страници или заглавия на страници и т.н., тогава общият процент на запазване на данните за Вашата политика за поверителност е по-високият от двете .",
|
3571 |
+
"DeleteAggregateReportsDetailedInfo": "Когато активирате тази настройка, всички обобщени отчети ще бъдат изтрити. Обобщените отчети се генерират от необработените данни и представляват обобщени данни от няколко отделни посещения. Например отчетът „Държава“ изброява обобщени числа, за да видите колко посещения сте получили от всяка държава.",
|
3572 |
+
"DeleteBothConfirm": "На път сте да активирате както изтриването на необработени данни, така и изтриването на отчетни данни. Това ще премахне завинаги възможността Ви да преглеждате стари данни за анализ. Сигурни ли сте, че искате да направите това?",
|
3573 |
+
"DeleteDataDescription": "Можете да конфигурирате Matomo да изтрива редовно стари необработени данни и\/или обобщени отчети, за да запази Вашата база данни малка или да отговаря на разпоредбите за поверителност като GDPR.",
|
3574 |
"DeleteDataInterval": "Изтрий стара информация на всеки",
|
3575 |
+
"DeleteDataSettings": "Изтриване на старите потребителски логове и отчети",
|
3576 |
"DeleteLogDescription2": "Ако включите автоматичното изтриване на логове, трябва да сте сигурни, че всичките предишни дневни отчети са били преработени, за да не се изгуби информация.",
|
3577 |
+
"DeleteLogsConfirm": "На път сте да активирате изтриването на необработени данни. Ако старите необработени данни бъдат премахнати и отчетите все още не са създадени, няма да можете да видите исторически данни от минали анализи. Сигурни ли сте, че искате да направите това?",
|
3578 |
"DeleteLogsOlderThan": "Изтрий отчети по-стари от",
|
3579 |
"DeleteMaxRows": "Максималният брой редове, които да бъдат изтрити на един път:",
|
3580 |
"DeleteMaxRowsNoLimit": "без лимит",
|
3581 |
+
"DeleteOldAggregatedReports": "Изтрийте старите обобщени отчетни данни",
|
3582 |
+
"DeleteOldRawData": "Редовно изтриване на стари данни",
|
3583 |
+
"DeleteOldVisitorLogs": "Изтрийте стари лог файлове за посетители",
|
3584 |
+
"DeleteRawDataInfo": "Необработените данни съдържат всички подробности за всяко отделно посещение и всяко действие, предприето от Вашите посетители. Когато изтриете необработени данни, изтритата информация вече няма да бъде налична в лога на посетителите. Освен това, ако по-късно решите да създадете сегмент, сегментираните отчети няма да станат достъпни за периода от време, който е бил изтрит, тъй като всички обобщени отчети се генерират от тези необработени данни.",
|
3585 |
"DeleteReportsConfirm": "На път сте да включите изтриване на отчетите. Ако старите отчети са изтрити, вие ще трябвате да ги изготвите наново за да ги видите. Сигурни ли сте, че искате да направите това?",
|
3586 |
+
"DeleteReportsInfo2": "Ако изтриете стари отчети, те може да бъдат повторно обработени от Вашите RAW данни, когато ги поискате.",
|
3587 |
+
"DeleteReportsInfo3": "Ако сте активирали и „%s“, тогава данните от отчетите, които изтривате, ще бъдат загубени за постоянно.",
|
3588 |
"DeleteReportsOlderThan": "Изтрива отчети по-стари от",
|
3589 |
+
"DeleteSchedulingSettings": "Планирайте изтриването на стари данни",
|
3590 |
+
"DeleteSelectedVisits": "Изтрийте избраните посещения",
|
3591 |
+
"DeleteVisitsConfirm": "Наистина ли искате да изтриете избраните посещения? Това действие не може да бъде отменено.",
|
3592 |
+
"DeletionFromMatomoOnly": "Моля, имайте предвид също, че всички данни ще бъдат изтрити само от базата данни на Matomo, но не и от логовете на Вашия уеб сървър. Също така имайте предвид, че ако импортирате повторно исторически данни, например от логове, всички по-рано изтрити данни могат да бъдат импортирани отново.",
|
3593 |
"DoNotTrack_Description": "Не проследявай е технология и предложение, което позволява отказ от проследяване на сайтове, които те не посещават; включително инструменти за анализ, рекламни мрежи и социални платформи.",
|
3594 |
+
"DoNotTrack_Disable": "Изключете \"Не проследявай\" поддръжката",
|
3595 |
+
"DoNotTrack_Disabled": "В момента Matomo проследява всички посетители, дори когато са посочили „Не искам да бъда проследяван“ в своите уеб браузъри.",
|
3596 |
+
"DoNotTrack_DisabledMoreInfo": "Препоръчваме да активирате поддръжката на DoNotTrack, за да зачитате поверителността на Вашите посетители",
|
3597 |
+
"DoNotTrack_Enable": "Включете \"Не проследявай\" поддръжката",
|
3598 |
"DoNotTrack_Enabled": "Понастоящем вие уважавате поверителността на вашите потребители. Браво!",
|
3599 |
+
"DoNotTrack_EnabledMoreInfo": "Когато потребителите са настроили своя уеб браузър на „Не искам да бъда проследяван“ (DoNotTrack е активиран), Matomo няма да проследява тези посещения.",
|
3600 |
+
"DoNotTrack_SupportDNTPreference": "Поддръжка на \"Не проследявай\" настройки",
|
3601 |
"EstimatedDBSizeAfterPurge": "Изчислен размер на базата данни след изтриване",
|
3602 |
"EstimatedSpaceSaved": "Изчислено спестено място",
|
3603 |
+
"ExportSelectedVisits": "Експортиране на избраните посещения",
|
3604 |
+
"ExportingNote": "В случай, че експортирате данните, за да упражните правото на достъп, моля, уверете се, че избраните посещения действително се извършват от субекта на данните, за който искате да експортирате данните.",
|
3605 |
+
"FindDataSubjectsBy": "Намерете субекти на данни по",
|
3606 |
+
"FindMatchingDataSubjects": "Намерете съвпадащи субекти на данни",
|
3607 |
+
"FontColor": "Цвят на шрифта",
|
3608 |
+
"FontFamily": "Семейство шрифтове",
|
3609 |
+
"FontSize": "Размер на шрифта",
|
3610 |
+
"ForceCookielessTracking": "Принудително проследяване без бисквитки",
|
3611 |
+
"ForceCookielessTrackingDescription": "Активирането на тази опция автоматично ще актуализира %1$s, така че съдържа допълнителен код, за да се гарантира, че всички тракери няма да използват бисквитки. Освен това Matomo ще игнорира всички проследяващи бисквитки от страна на сървъра.",
|
3612 |
+
"ForceCookielessTrackingDescription2": "Бисквитките ще бъдат деактивирани дори когато използвате методите за съгласие в Matomo Tracker и извикването например на методите за съгласие с бисквитки няма да активира бисквитките.",
|
3613 |
+
"ForceCookielessTrackingDescriptionNotWritable": "Файлът за проследяване на JS \"%1$s\" не може да бъде записван, което е необходимо, за да работи тази функция напълно. Когато файлът за проследяване на JS не може да се записва, бисквитките ще бъдат игнорирани само от страна на сървъра, но бисквитките все още могат да бъдат зададени в браузъра. За да разрешите този проблем, Вие или системен администратор трябва да промените разрешенията за файлове, така че Вашият уеб сървър да може да промени този файл.",
|
3614 |
+
"GDPR": "GDPR",
|
3615 |
+
"GdprChecklistDesc1": "Ако обработвате лични данни на европейски граждани чрез Matomo, дори ако Вашата компания се намира извън Европа, трябва да изпълните задълженията по GDPR и това ръководство ще ви помогне.",
|
3616 |
+
"GdprChecklistDesc2": "Намерете по-долу нашите инструменти, които Ви позволяват лесно да упражнявате правата на Вашите потребители, и списъка с действия, които трябва да предприемете, за да направите използването на Matomo в съответствие с GDPR и да защитите данните си. Посетете нашето %1$sРъководство за потребителя на GDPR%2$s, за да научите още повече.",
|
3617 |
+
"GdprChecklists": "Контролни списъци на GDPR",
|
3618 |
"GdprManager": "Управление на GDPR",
|
3619 |
+
"GdprOverview": "Общ преглед на GDPR",
|
3620 |
+
"GdprOverviewIntro1": "Общият регламент за защита на данните (GDPR) е регламент, който укрепва и унифицира защитата на данните за всички лица в Европейския съюз (ЕС).",
|
3621 |
+
"GdprOverviewIntro2": "Ако предприемете стъпки, за да гарантирате, че в Matomo не се събират лични данни, тогава може да не се притеснявате от GDPR за Matomo (ако не проследявате IP адреси, потребителски идентификатори, данни за геолокация и т.н.).",
|
3622 |
+
"GdprTools": "Инструменти за GDPR",
|
3623 |
+
"GdprToolsOverviewHint": "В случай, че не знаете какво е GDPR, моля, вижте %1$sОбщ преглед на GDPR%2$s.",
|
3624 |
+
"GdprToolsPageIntro1": "Тази страница е създадена, за да можете да упражнявате правата на субекта на данни.",
|
3625 |
+
"GdprToolsPageIntro2": "Тук можете да упражните правата на Вашите потребители с нашите процедури, подходящи за GDPR:",
|
3626 |
+
"GdprToolsPageIntroAccessRight": "правото на достъп до всичките им данни (и правото на преносимост на данните),",
|
3627 |
+
"GdprToolsPageIntroEraseRight": "правото на изтриване на някои или всичките им данни (и правото на поправка).",
|
3628 |
+
"GeolocationAnonymizeIpNote": "Забележка: Геолокацията ще има приблизително същите резултати с анонимизиран 1 байт. С 2 или повече байта геолокацията ще бъде неточна.",
|
3629 |
"GetPurgeEstimate": "Изчисляване на времето за изтриване",
|
3630 |
+
"HowDoIAskForConsent": "Как да поискам съгласие от потребителите?",
|
3631 |
+
"HowDoIAskForConsentIntroduction": "Научете всичко за %1$sискането на бисквитка или съгласие за проследяване в нашето ръководство за интеграция.%2$s",
|
3632 |
+
"Imprint": "Отпечатък",
|
3633 |
+
"ImprintUrl": "URL за отпечатване",
|
3634 |
+
"ImprintUrlDescription": "Връзка към Вашата страница за принт.",
|
3635 |
+
"IndividualsRights": "Права на физическите лица",
|
3636 |
+
"IndividualsRightsAccess": "Право на достъп: %1$sпотърсете субект на данни%2$s и експортирайте всички негови данни.",
|
3637 |
+
"IndividualsRightsChildren": "Ако предлагате онлайн услуги на деца и разчитате на съгласие за събиране на информация за тях, тогава може да се нуждаете от съгласието на родител или настойник, за да обработвате личните данни на децата законно.",
|
3638 |
+
"IndividualsRightsErasure": "Правото на изтриване: %1$sпотърсете субект на данни%2$s и изтрийте някои или всички негови данни.",
|
3639 |
+
"IndividualsRightsInform": "Правото да бъдете информирани: информирайте потребителите си с ясно известие за поверителност.",
|
3640 |
+
"IndividualsRightsIntro": "Упражнявайте правата на Вашите потребители с нашите процедури, подходящи за GDPR:",
|
3641 |
+
"IndividualsRightsObject": "Право на възражение: %1$sпозволете на вашите потребители лесно да се откажат %2$s на страницата с Вашата политика за поверителност.",
|
3642 |
+
"IndividualsRightsPortability": "Правото на преносимост на данните: %1$sпотърсете субект на данни%2$s и експортирайте всички негови данни.",
|
3643 |
+
"IndividualsRightsRectification": "Право на поправка: можете %1$s да търсите субект на данни %2$s и да изтриете някои или всички негови данни.",
|
3644 |
+
"InfoSomeReferrerInfoMayBeAnonymized": "Част от информацията за препоръчаната информация може да липсва, тъй като анонимизирането на препращащия е активирано, както следва: %s",
|
3645 |
"KeepBasicMetrics": "Запазване на основните данни (посещения, посещения на страници, степен на отпадане, цели, конверсия при електронна търговия и др.)",
|
3646 |
+
"KeepBasicMetricsReportsDetailedInfo": "Когато активирате тази настройка, някои цифрови ключови показатели за ефективност няма да бъдат изтрити.",
|
3647 |
+
"KeepDataFor": "Запазете всички данни за",
|
3648 |
+
"KeepReportSegments": "За да запазите горната информация, също запазете сегментите на отчета",
|
3649 |
+
"LastAction": "Последно действие",
|
3650 |
"LastDelete": "Последното изтриване е било на",
|
3651 |
"LeastDaysInput": "Моля укажете номер на дни по голям от %s.",
|
3652 |
"LeastMonthsInput": "Моля укажете номер на месеци по-голям от %s.",
|
3653 |
+
"MatchingDataSubjects": "Съвпадение на субектите на данни",
|
3654 |
"MenuPrivacySettings": "Поверителност",
|
3655 |
"NextDelete": "Следващото планирано изтриване е на",
|
3656 |
+
"NoDataSubjectsFound": "Няма намерени субекти на данни",
|
3657 |
+
"OptOutCustomize": "Персонализирайте вграденат iFrame за отказване",
|
3658 |
+
"OptOutHtmlCode": "HTML код за вграждане във Вашия уебсайт",
|
3659 |
+
"OptOutPreview": "Предварителен преглед на отказа, както ще се показва на Вашия уебсайт",
|
3660 |
+
"PluginDescription": "Увеличете поверителността за Вашите потребители и направете поверителността на Вашия екземпляр Matomo в съответствие с местното законодателство.",
|
3661 |
+
"PrivacyPolicy": "Политика за поверителност",
|
3662 |
+
"PrivacyPolicyUrl": "URL адрес на политиката за поверителност",
|
3663 |
+
"PrivacyPolicyUrlDescription": "Връзка към Вашата страница с Политика за поверителност.",
|
3664 |
+
"PrivacyPolicyUrlDescriptionSuffix": "Ако зададете това, то ще се показва в долната част на страницата за вход и на страниците, до които потребителят „%1$s“ може да има достъп.",
|
3665 |
+
"PseudonymizeUserId": "Заменете User ID с псевдоним",
|
3666 |
+
"PseudonymizeUserIdNote": "Когато активирате тази опция, потребителският идентификатор ще бъде заменен с псевдоним, за да се избегне директно съхраняване и показване на лична информация, като например имейл адрес. В технически термини: като се има предвид Вашият потребителски идентификатор, Matomo ще обработи псевдонима на потребителския идентификатор, използвайки осолена хеш функция.",
|
3667 |
+
"PseudonymizeUserIdNote2": "Забележка: замяната с псевдоним не е същото като анонимизиране. Съгласно GDPR: псевдонимът User ID все още се брои като лични данни. Оригиналният потребителски идентификатор все още може да бъде идентифициран, ако е налична определена допълнителна информация (до която само Matomo и Вашият процесор на данни имат достъп).",
|
3668 |
"PurgeNow": "Изтриване на базата данни СЕГА",
|
3669 |
"PurgeNowConfirm": "Вие сте на път перманентно да изтриете информацията от вашата база данни. Сигурни ли сте, че искате да продължите?",
|
3670 |
"PurgingData": "Изтриване на базата данни...",
|
3671 |
+
"RawDataNeverRemoved": "необработените данни за посещения и действия<strong>никога<\/strong> не се изтриват.",
|
3672 |
+
"RawDataRemovedAfter": "всички необработени данни за посещения и действия се изтриват след %1$s.",
|
3673 |
+
"RecommendedForPrivacy": "Препоръчва се за поверителност",
|
3674 |
"ReportsDataSavedEstimate": "Размер на базата данни",
|
3675 |
+
"ReportsNeverRemoved": "обобщените отчети <strong>никога<\/strong> не се изтриват.",
|
3676 |
+
"ReportsRemovedAfter": "всички обобщени отчети се изтриват след %1$s.",
|
3677 |
+
"ResultIncludesAllVisits": "Намерените резултати включват всички посещения без ограничение във времето и включват днес.",
|
3678 |
+
"ResultTruncated": "Бяха намерени повече от %1$s резултати и резултатът беше съкратен до първите %1$s посещения.",
|
3679 |
"SaveSettingsBeforePurge": "Вие променихте настройките за изтриване на информация. Моля запазете ги, преди да започнете изтриване.",
|
3680 |
+
"SearchForDataSubject": "Търсене на субект на данни",
|
3681 |
+
"SecurityProcedures": "Процедури за сигурност",
|
3682 |
+
"SecurityProceduresDesc1": "Приложете нашите %1$sпрепоръки за сигурност%2$s, за да запазите данните си Matomo в безопасност.",
|
3683 |
+
"SecurityProceduresDesc2": "Проверете дали имате писмен договор с компанията, която Ви предоставя сървъра или хостинг на Matomo, който гарантира, че %1$s са осигурени подходящи предпазни мерки %2$s.",
|
3684 |
+
"SecurityProceduresDesc3": "Включете Matomo във Вашата %1$sпроцедура при нарушаване на данните%2$s.",
|
3685 |
+
"SecurityProceduresDesc4": "Включете Matomo във Вашата %1$sоценка на въздействието върху поверителността на данните (DPIA)%2$s, ако е приложимо.",
|
3686 |
+
"SecurityProceduresIntro": "Информирайте своите потребители ясно и прозрачно и информирайте колегите си за събираните данни и как се използват:",
|
3687 |
+
"SeeAlsoOurOfficialGuidePrivacy": "Вижте също нашето официално ръководство: %1$sПоверителност на уеб анализи%2$s",
|
3688 |
+
"SelectWebsite": "Изберете уебсайт",
|
3689 |
+
"ShowInEmbeddedWidgets": "Показване във вградени уиджети",
|
3690 |
+
"ShowInEmbeddedWidgetsDescription": "Ако е поставена отметка, връзка към Вашата Политика за поверителност и Общи условия ще се покаже в долната част на вградените уиджети.",
|
3691 |
+
"TeaserHeader": "На тази страница можете да персонализирате Matomo, за да направи поверителността съвместима със съществуващите закони, като: %1$s анонимизира IP адреса на посетителя %2$s, %3$s автоматично премахва старите лог файлове на посетителите от базата данни %4$s и %5$s анонимизира предварително проследени необработени потребителски данни%6$s.",
|
3692 |
"TeaserHeadline": "Настройки на поверителността",
|
3693 |
+
"TermsAndConditionUrl": "URL на Общите условия",
|
3694 |
+
"TermsAndConditionUrlDescription": "Връзка към вашата страница с Общи условия.",
|
3695 |
+
"TermsAndConditions": "Общи условия",
|
3696 |
+
"TrackingOptOut": "Позволете на потребителите да се откажат от проследяване",
|
3697 |
+
"UnsetActionColumns": "Деактивиране на колоните за действие",
|
3698 |
+
"UnsetActionColumnsHelp": "Това действие не може да бъде отменено. Списък с колони на базата данни в действие, което искате да премахнете. Всяка стойност за тази колона ще бъде зададена на стойност по подразбиране.",
|
3699 |
+
"UnsetVisitColumns": "Незададени колони за посещения",
|
3700 |
+
"UnsetVisitColumnsHelp": "Това действие не може да бъде отменено. Списък с колони на базата данни в обхвата на посещение, които искате да премахнете. Всяка стойност за тази колона ще бъде зададена на стойност по подразбиране. Моля, имайте предвид, че ако същата колона съществува в обхват „преобразуване“, тогава тази колона също ще бъде изтрита",
|
3701 |
"UseAnonymizeIp": "Правене на IP-тата на посетителите анонимни",
|
3702 |
+
"UseAnonymizeOrderId": "Анонимизиране на идентификатора на поръчката",
|
3703 |
+
"UseAnonymizeTrackingData": "Анонимизирайте данните за проследяване",
|
3704 |
+
"UseAnonymizeUserId": "Анонимизиране на потребителския идентификатор",
|
3705 |
+
"UseAnonymizedIpForVisitEnrichment": "Също така използвайте анонимните IP адреси, когато обогатявате посещенията.",
|
3706 |
+
"UseAnonymizedIpForVisitEnrichmentNote": "Плъгини като Geo Location чрез IP и доставчик подобряват метаданните на посетителите. По подразбиране тези плъгини използват анонимизираните IP адреси. Ако изберете „Не“, вместо това ще се използва неанонимизираният пълен IP адрес, което води до по-малко поверителност, но по-добра точност на данните.",
|
3707 |
"UseDeleteLog": "Редовно изтриване на стари данни от базата данни",
|
3708 |
+
"UseDeleteReports": "Периодично изтрива старите посетителски отчети от базата данни",
|
3709 |
+
"UsersOptOut": "Потребителите се отказват",
|
3710 |
+
"VisitsMatchedCriteria": "Тези посещения отговарят на избраните критерии.",
|
3711 |
+
"VisitsSuccessfullyDeleted": "Посещенията бяха успешно изтрити",
|
3712 |
+
"VisitsSuccessfullyExported": "Посещенията бяха успешно експортирани",
|
3713 |
+
"WhenConsentIsNeeded1": "В контекста на %1$sрегламентите за поверителност - GDPR%2$s, когато обработвате лични данни, в някои случаи ще трябва да поискате съгласието на Вашите потребители. За да определите дали трябва да поискате съгласие, трябва да определите дали Вашето законно основание за обработка на лични данни е „Съгласие“ или „Легитимен интерес“, или дали можете да избегнете събирането на лични данни изцяло. Препоръчваме Ви да научите повече за %3$sзаконовата база съгласно GDPR за Matomo%4$s.",
|
3714 |
+
"WhenConsentIsNeeded2": "Имайте предвид, че когато се нуждаете от съгласието на Вашите потребители и ако не можете да докажете, че сте получили „Съгласието“ на потребителите си в миналото, препоръчваме %1$s да анонимизирате необработените си данни за проследяваните по-рано потребители%2$s.",
|
3715 |
+
"WhenDoINeedConsent": "Кога трябва да поискам съгласие на потребителя?"
|
3716 |
+
},
|
3717 |
+
"ProfessionalServices": {
|
3718 |
+
"WidgetPremiumServicesForPiwik": "Премиум функции и услуги за Matomo"
|
3719 |
},
|
3720 |
"Referrers": {
|
3721 |
+
"Acquisition": "Придобиване",
|
3722 |
+
"AllReferrersReportDocumentation": "Този отчет показва всички Ваши реферали в един единен отчет, изброяващ всички уебсайтове, ключови думи за търсене и кампании, използвани от посетителите Ви, за да намерят Вашия уебсайт.",
|
3723 |
+
"AllReferrersSubcategory1": "Този раздел Ви показва броя на посещенията, които пристигат от различни типове канали и реферали. Кликнете върху бутоните плюс или минус, за да видите референтите във всеки тип.",
|
3724 |
+
"AllReferrersSubcategory2": "Можете също да анализирате броя на действията, извършени от всеки от Вашите източници на трафик, като активирате таблицата с изглед на показателите за ангажираност на посетителите.",
|
3725 |
+
"CampaignContent": "Съдържание на кампанията",
|
3726 |
+
"CampaignContentHelp": "Този параметър често се използва, когато тествате множество реклами, и включва името на всяка реклама, за да видите коя е най-ефективна за привличане на трафик.",
|
3727 |
+
"CampaignGroup": "Група кампании",
|
3728 |
+
"CampaignGroupHelp": "Този параметър се използва за проследяване на група кампании за идентифициране на група или аудитория. Групите кампании са полезни за проследяване на цялостната ефективност на множество кампании със сходни цели.",
|
3729 |
+
"CampaignId": "ID на кампания",
|
3730 |
+
"CampaignIdHelp": "Този параметър се използва за проследяване на идентификатор на кампанията: уникален идентификатор за кампанията, състоящ се от най-много 100 цифри, букви или символи.",
|
3731 |
+
"CampaignKeywordHelp": "Ако имате няколко кампании с едно и също име, можете да ги разграничите, като посочите ключова дума или подкатегория.",
|
3732 |
+
"CampaignMedium": "Средство за кампанията",
|
3733 |
+
"CampaignMediumHelp": "Използва се за описване на маркетинговата дейност, например „PPC“ за кампания с плащане на кликване или „SEM“ за платени реклами при търсене или „преглед“ за проследяване на преглед на продукт в партньорски сайт.",
|
3734 |
+
"CampaignNameHelp": "Изберете име, което описва за какво е създадена кампанията и което отличава кампанията Ви от другите Ви кампании. Например „Email-SummerDeals“ или „PaidAds-SummerDeals“.",
|
3735 |
+
"CampaignPageUrlHelp": "URL адресът на страницата, към която отива тази кампания, например „http:\/\/example.org\/offer.html“.",
|
3736 |
+
"CampaignPlacement": "Разположение на кампанията",
|
3737 |
+
"CampaignPlacementHelp": "Използва се за описание на рекламното разположение или позиция, например цял уебсайт, конкретни страници от уебсайт, отделен рекламен елемент, позициониран на една страница, видеоклип, приложение за мобилен телефон и др.",
|
3738 |
+
"CampaignSource": "Източник на кампанията",
|
3739 |
+
"CampaignSourceHelp": "Използва се за проследяване на източника на кампанията, като например „бюлетин“ за Вашия имейл маркетинг, „партньор“ или името на уебсайта, на който се показват рекламите Ви.",
|
3740 |
"Campaigns": "Кампании",
|
3741 |
"CampaignsDocumentation": "Посетители, дошли до вашият уеб сайт, в резултат на камания. %1$s Погледнете %2$s отчета за повече детайли.",
|
3742 |
+
"CampaignsReportDocumentation": "Този отчет показва кои кампании са довели посетителите до уебсайта Ви.",
|
3743 |
+
"CampaignsSubcategoryHelp": "Разделът Проследяване на кампании Ви позволява да анализирате посещенията, свързани с различните стойности за проследяване, които са били свързани с Вашите дигитални кампании. Той може да разкрие неща като колко трафик привличат Вашите кампании, кои рекламни послания са най-ефективни, колко ангажирани са посетителите на кампанията и дали кампанията води до продажби или не.",
|
3744 |
"ColumnCampaign": "Кампании",
|
3745 |
"ColumnSearchEngine": "Търсещи машини",
|
3746 |
"ColumnSocial": "Социална мрежа",
|
3747 |
"ColumnWebsite": "Сайт",
|
3748 |
"ColumnWebsitePage": "Интернет страница",
|
3749 |
"DirectEntry": "Директни посещения",
|
3750 |
+
"DirectEntryDocumentation": "Посетител е въвел URL адреса в своя браузър и е започнал да сърфира във Вашия уебсайт - той е влязъл директно в уебсайта.",
|
3751 |
+
"Distinct": "Различни реферали по тип канал",
|
3752 |
"DistinctCampaigns": "отделни кампании",
|
3753 |
"DistinctKeywords": "отделни ключови думи",
|
3754 |
"DistinctSearchEngines": "отделни търсещи машини",
|
3755 |
+
"DistinctSocialNetworks": "различни социални мрежи",
|
3756 |
+
"DistinctWebsiteUrls": "отделни URL адреси на уебсайтове",
|
3757 |
"DistinctWebsites": "отделни сайтове",
|
3758 |
+
"EcommerceLogSubcategoryHelp1": "Логът на Ecommerce предоставя подробни данни на ниво сесия, така че можете да разгледате пълната сесия за всеки потребител, който е направил покупка или е изоставил кошницата си. Това може да Ви помогне да разберете какво правят потребителите преди и след покупка, за да разкрият възможности за оптимизация.",
|
3759 |
+
"EcommerceLogSubcategoryHelp2": "Данните на тази страница се актуализират в реално време.",
|
3760 |
"EvolutionDocumentation": "Това е преглед на препращащите сайтове, които са довели посетители до вашият уеб сайт.",
|
3761 |
+
"EvolutionDocumentationMoreInfo": "За повече информация относно различните типове канали вижте документацията на таблицата %s.",
|
3762 |
+
"GenerateUrl": "Генериране на URL",
|
3763 |
"Keywords": "Ключови думи",
|
3764 |
"KeywordsReportDocumentation": "Този отчет показва кои ключови думи потребителите са използвали преди да бъдат препратени към вашият уеб сайт. %s Ако кликнете върху реда в таблицата, можете да видите разпределението на търсачките, в които са били търсени тези ключови думи.",
|
3765 |
+
"KeywordsReportDocumentationNote": "Забележка: Този отчет изброява повечето ключови думи като недефинирани, тъй като повечето търсачки не изпращат точната ключова дума, използвана в търсачката.",
|
3766 |
+
"PercentOfX": "Процент от %s",
|
3767 |
+
"PluginDescription": "Отчита данните за препоръчаните: търсачки, ключови думи, уебсайтове, кампании, социални медии, директен вход.",
|
3768 |
+
"ProductSubcategoryHelp": "Изгледът на продукти може да Ви помогне да идентифицирате продукти и категории, които са с по-висока или по-ниска ефективност, за да разкрие тенденции и възможности, свързани с избора на продукти и страниците на магазина Ви.",
|
3769 |
"Referrer": "Препоръчител",
|
3770 |
"ReferrerName": "Име на референт",
|
3771 |
+
"ReferrerNames": "Имена на препращащи лица",
|
3772 |
+
"ReferrerTypes": "Типове канали",
|
3773 |
+
"ReferrerURLs": "URL референции",
|
3774 |
"Referrers": "Референции",
|
3775 |
"ReferrersOverview": "Преглед на препоръчителите",
|
3776 |
+
"ReferrersOverviewDocumentation": "Този отчет показва какви канали за придобиване са използвали посетителите Ви, за да стигнат до уебсайта Ви, и броя на посещенията, за които отговаря всеки тип канал.",
|
3777 |
+
"ReferrersOverviewSubcategoryHelp1": "Общ преглед на придобиването показва процента от трафика Ви от всички източници за избран период от време.",
|
3778 |
+
"ReferrersOverviewSubcategoryHelp2": "Можете също да кликнете върху конкретен тип канал, за да го покажете в графиката на еволюцията. Това може да Ви помогне да откриете кои канали допринасят с най-голям трафик към Вашия сайт, както и евентуални модели във времето. Например, определен канал може да се представи по-добре през уикендите.",
|
3779 |
"SearchEngines": "Търсачки",
|
3780 |
"SearchEnginesDocumentation": "Посетител, който е бил препратен към вашият уеб сайт от търсачка. %1$s Погледнете %2$s отчета за повече детайли.",
|
3781 |
"SearchEnginesReportDocumentation": "Този отчет показва кои търсачки са изпратили потребители към вашият уеб сайт. %s Ако кликнете върху реда в таблицата, можете да видите какво потребителите са търсили в конкретната търсачка.",
|
3782 |
+
"SearchEnginesSubcategoryHelp1": "Този раздел Ви помага да анализирате оптимизацията и ефективността на Вашата търсачка. Можете да анализирате най-популярните си ключови думи с комбинираните отчети за ключови думи или да видите кои ключови думи се представят добре в конкретни търсачки за по-целенасочен анализ и оптимизация.",
|
3783 |
+
"SearchEnginesSubcategoryHelp2": "Потребителите на плъгини %1$sMatomo Cloud%2$s и %3$s Производителност на ключови думи в търсачката %4$s ще получат най-добрите резултати от този отчет.",
|
3784 |
"Socials": "Социални мрежи",
|
3785 |
+
"SocialsReportDocumentation": "Този отчет показва кои социални мрежи са довели посетителите до уебсайта Ви.<br>Като кликнете върху ред в таблицата, можете да видите от кои страници на социални мрежи посетителите са дошли до Вашия уебсайт.",
|
3786 |
+
"SocialsSubcategoryHelp": "В тази таблица можете да видите кои уебсайтове са насочили посетители към Вашия сайт.",
|
3787 |
+
"SubmenuSearchEngines": "Търсачки & Ключови думи",
|
3788 |
"SubmenuWebsitesOnly": "Сайтове",
|
3789 |
+
"Type": "Тип канал",
|
3790 |
"TypeCampaigns": "%s от кампании",
|
3791 |
"TypeDirectEntries": "%s директни посещения",
|
3792 |
+
"TypeReportDocumentation": "Тази таблица съдържа информация за разпределението на типовете канали.",
|
3793 |
"TypeSearchEngines": "%s от търсещите машини",
|
3794 |
+
"TypeSocialNetworks": "%s от социални мрежи",
|
3795 |
"TypeWebsites": "%s от сайтове",
|
3796 |
+
"URLCampaignBuilder": "Създател на URL адреси на кампания",
|
3797 |
+
"URLCampaignBuilderIntro": "Инструментът %1$sURL Builder%2$s Ви позволява да генерирате URL адреси, готови за използване за проследяващи кампании в Matomo. Вижте документацията относно %3$sПроследяване на кампании%4$s за повече информация.",
|
3798 |
+
"URLCampaignBuilderResult": "Генериран URL адрес, който можете да копирате и поставите във Вашите кампании, имейл бюлетин, Facebook реклами или туитове:",
|
3799 |
"UsingNDistinctUrls": "(използват се %s различни адреса)",
|
3800 |
"ViewAllReferrers": "Преглед на всички препоръчители",
|
3801 |
"ViewReferrersBy": "Преглед на всички препоръчители по %s",
|
3802 |
+
"VisitorsFromCampaigns": "Посетители от кампании",
|
3803 |
+
"VisitorsFromDirectEntry": "Посетители с директно посещение",
|
3804 |
+
"VisitorsFromSearchEngines": "Посетители от търсачки",
|
3805 |
+
"VisitorsFromSocialNetworks": "Посетители от социални мрежи",
|
3806 |
+
"VisitorsFromWebsites": "Посетители от уебсайтове",
|
3807 |
"Websites": "Сайтове",
|
3808 |
"WebsitesDocumentation": "Посетителят е последвал връзка в друг сайт, която сочи към вашия сайт. %1$s Вижте %2$s отчета за повече детайли.",
|
3809 |
"WebsitesReportDocumentation": "В тази таблица, можете да видите кои уеб сайтове са препратили посетители към вашият сайт. %s Ако кликнете върху реда в таблицата, можете да видите URL-ите, чрез които потребителите са стигнали до вашият сайт.",
|
3810 |
+
"WebsitesSubcategoryHelp1": "В тази таблица можете да видите кои уебсайтове са насочили посетители към Вашия сайт.",
|
3811 |
+
"WebsitesSubcategoryHelp2": "Като кликнете върху ред в таблицата, можете да видите на кои URL адреси са били връзките към Вашия уебсайт.",
|
3812 |
"WidgetExternalWebsites": "Външни сайтове",
|
3813 |
+
"WidgetGetAll": "Всички канали",
|
3814 |
"WidgetSocials": "Списък на социалните мрежи",
|
3815 |
"WidgetTopKeywordsForPages": "Най-използваните ключови думи",
|
3816 |
+
"XPercentOfVisits": "%s от посещения"
|
|
|
|
|
3817 |
},
|
3818 |
"Resolution": {
|
3819 |
"ColumnConfiguration": "Обобщена конфигурация",
|
3820 |
"ColumnResolution": "Разделителна способност на екрана",
|
3821 |
"Configurations": "Конфигурации",
|
3822 |
+
"PluginDescription": "Отчита разделителната способност на екрана на Вашите посетители.",
|
3823 |
"Resolutions": "Разделителна способност",
|
3824 |
"WidgetGlobalVisitors": "Конфигурация на гло",
|
3825 |
"WidgetGlobalVisitorsDocumentation": "Този отчет показва повечето общопознати цялостни конфигурации, които вашите посетители са имали. Конфигурация е комбинацията от операционна система, тип на браузера и резолюция на екрана.",
|
3826 |
+
"WidgetResolutions": "Разделителна способност",
|
3827 |
+
"WidgetResolutionsDocumentation": "Този отчет показва разделителната способност на екрана, използвана от посетителите, когато разглеждат Вашия уебсайт."
|
3828 |
},
|
3829 |
"SEO": {
|
3830 |
"PluginDescription": "Този плъгин извлича и показва SEO метрики: Alexa уеб ранк, Google Pagerank, брой индексирани страници и брой обратни връзки за избраната уеб страница.",
|
3837 |
"SEORankingsFor": "SEO ранг за %s"
|
3838 |
},
|
3839 |
"ScheduledReports": {
|
3840 |
+
"AggregateReportsFormat": "Опции за показване",
|
3841 |
"AggregateReportsFormat_GraphsOnly": "Покажете само графики (без докладни таблици)",
|
3842 |
+
"AggregateReportsFormat_TablesAndGraphs": "Покажете докладни таблици и графики за всички доклади",
|
3843 |
"AggregateReportsFormat_TablesOnly": "(по подразбиране) Покажи таблицата с отчетите (Графики само за ключови метрични данни)",
|
3844 |
"AlsoSendReportToTheseEmails": "Също така изпраща доклада до тези имейли (по един на ред):",
|
3845 |
"AreYouSureDeleteReport": "Сигурни ли сте че искате да изтриете този доклад и разписание?",
|
3853 |
"EmailReports": "Email доклади",
|
3854 |
"EmailSchedule": "Списък с е-пощи",
|
3855 |
"EvolutionGraph": "Показване на графиките с история за най-високите %s стойности",
|
3856 |
+
"EvolutionGraphsShowForEachInPeriod": "Графиките на еволюцията показват развитието за %1$sвсеки ден %2$s през последния %3$s",
|
3857 |
+
"EvolutionGraphsShowForPreviousN": "Графиките на еволюцията показват развитието спрямо предишния N %s",
|
3858 |
"FrontPage": "Заглавна страница",
|
3859 |
"MonthlyScheduleHelp": "Месечен график: докладът ще бъде изпратен на първия ден от всеки месец.",
|
3860 |
"MustBeLoggedIn": "Трябва да сте влязъл, за да създавате и планирате персонализирани отчети.",
|
3861 |
"NoRecipients": "Този доклад все още няма получатели",
|
3862 |
+
"NoSubscriptionFound": "Няма намерен абонамент. Може би отчетът вече е бил отписан или премахнат.",
|
3863 |
+
"NoTokenProvided": "В URL адреса не е предоставен токен",
|
3864 |
"Pagination": "Страница %1$s от %2$s",
|
3865 |
+
"PersonalEmailReports": "Лични отчети за имейли",
|
3866 |
"PiwikReports": "Matomo доклади",
|
3867 |
+
"PleaseFindAttachedFile": "Моля, вижте Вашия %1$s отчет за %2$s в прикачения файл.",
|
3868 |
"PleaseFindBelow": "Моля намерете по-долу вашият %1$s отчет за %2$s.",
|
3869 |
+
"PluginDescription": "Създайте персонализирани отчети и насрочете изпращането им по имейл ежедневно, седмично или месечно до един или няколко души. Поддържат се няколко формата на отчети (html, pdf, csv, изображения).",
|
3870 |
"ReportFormat": "Формат на доклад",
|
3871 |
+
"ReportHour": "Изпратете отчет в %s часа",
|
3872 |
+
"ReportHourWithUTC": "%s часа UTC",
|
3873 |
"ReportIncludeNWebsites": "Този отчет ще включва главните метрични данни за всички уеб сайтове, които са били посещавани поне веднъж (от %s сайта, които са налични).",
|
3874 |
+
"ReportPeriod": "Отчетен период",
|
3875 |
+
"ReportPeriodHelp": "Периодът на данните, обхванати от този отчет. По подразбиране това е същото като графика за имейли, така че ако отчетът се изпраща ежеседмично, той ще съдържа информация за последната седмица.",
|
3876 |
+
"ReportPeriodHelp2": "Можете обаче да промените това, ако искате да виждате различна информация и все пак да запазите имейл графика. Например, ако имейл графикът е седмичен и периодът на отчет е „ден“, ще получавате информация за последния ден всяка седмица.",
|
3877 |
"ReportSent": "Отчетът е изпратен",
|
|
|
3878 |
"ReportType": "Изпрати доклад чрез",
|
3879 |
+
"ReportUnsubscribe": "Отписване на отчет",
|
3880 |
"ReportUpdated": "Отчетът е обновен",
|
3881 |
+
"ReportsIncluded": "Включена статистика",
|
3882 |
"SegmentAppliedToReports": "Сегментът '%s' се прилага към отчетите.",
|
3883 |
+
"SegmentDeleted": "Сегментът е изтрит",
|
3884 |
+
"Segment_Deletion_Error": "Този сегмент не може да бъде изтрит или направен невидим за други потребители, защото се използва за генериране на отчет(и) по имейл %s. Моля, опитайте отново, след като премахнете този сегмент от този отчет(и).",
|
3885 |
+
"Segment_Help": "Можете да изберете съществуващ персонализиран сегмент, който да приложите към данните в този имейл отчет. Можете да създавате и редактирате персонализирани сегменти в таблото си %1$s (кликнете тук, за да отворите) %2$s, след това кликнете върху полето „%3$s“, след това „%4$s“.",
|
3886 |
"SendReportNow": "Изпрати доклад сега",
|
3887 |
"SendReportTo": "Изпрати доклад до",
|
3888 |
+
"SentFromX": "Изпратено от %s.",
|
3889 |
"SentToMe": "Изпрати до мен",
|
3890 |
+
"SuccessfullyUnsubscribed": "Успешно сте отписани от отчета %1$s.",
|
3891 |
"TableOfContent": "Лист с отчети",
|
3892 |
"ThereIsNoReportToManage": "Няма отчет за сайт %s",
|
3893 |
+
"TopLinkTooltip": "Създавайте отчети по имейл, за да получавате статистиката на Matomo автоматично на Вашия имейл или адрес на клиентите Ви!",
|
3894 |
"TopOfReport": "Върнете се в началото",
|
3895 |
+
"Unsubscribe": "Отписване от абонамента",
|
3896 |
+
"UnsubscribeFooter": "За да се отпишете от този доклад, моля, следвайте тази връзка: %1$s",
|
3897 |
+
"UnsubscribeReportConfirmation": "Наистина ли бихте искали да се отпишете от отчета %1$s?",
|
3898 |
"UpdateReport": "Обновете доклад",
|
3899 |
"WeeklyScheduleHelp": "Седмичен график: докладът ще бъде изпратен на първия понеделник на всяка седмица."
|
3900 |
},
|
3901 |
"SegmentEditor": {
|
3902 |
"AddANDorORCondition": "Добавяне на %s условие",
|
3903 |
"AddNewSegment": "Добави нов сегмент",
|
3904 |
+
"AddThisToMatomo": "Добавете този сегмент към Matomo",
|
3905 |
+
"AddingSegmentForAllWebsitesDisabled": "Добавянето на сегменти за всички уебсайтове е деактивирано.",
|
3906 |
"AreYouSureDeleteSegment": "Сигурни ли сте, че искате да изтриете този сегмент?",
|
3907 |
"AutoArchivePreProcessed": "Сегментираните отчети са предварително обработени (за по-голяма бързина се изисква archive.php cron)",
|
3908 |
"AutoArchiveRealTime": "Сегментираните отчети са обработени в реално време",
|
3909 |
+
"ChangingSegmentDefinitionConfirmationNotProcessedOnRequest": "На път сте да промените дефиницията на сегмента. Вашите отчети за анализ за този нов сегмент няма да бъдат налични, докато отчетите не бъдат обработени повторно. Може да отнеме няколко часа, докато данните от отчетите се покажат за този сегмент. Продължавате ли въпреки това?",
|
3910 |
+
"ChangingSegmentDefinitionConfirmationProcessedOnRequest": "На път сте да промените дефиницията на сегмента. Вашите аналитични отчети за този нов сегмент ще бъдат повторно обработени при поискване следващия път, когато ги заявите. Показването на отчетите Ви може да отнеме няколко минути. Желаете ли да продължите въпреки това?",
|
3911 |
"ChooseASegment": "Избери сегмент",
|
3912 |
+
"CompareThisSegment": "Сравнете този сегмент с избрания сегмент и период.",
|
3913 |
+
"CurrentlySelectedSegment": "Текущо избран сегмент: %s",
|
3914 |
+
"CustomSegment": "Персонализиран сегмент",
|
3915 |
+
"CustomUnprocessedSegmentApiError1": "Сегментът, който поискахте, все още не е създаден в редактора на сегменти и затова данните в отчета не са предварително обработени.",
|
3916 |
+
"CustomUnprocessedSegmentApiError2": "За да видите данни за този сегмент, трябва да отидете на Matomo и да създадете този сегмент ръчно в редактора на сегменти.",
|
3917 |
+
"CustomUnprocessedSegmentApiError3": "(Алтернативно можете да създадете нов сегмент програмно, като използвате метода на API SegmentEditor.add).",
|
3918 |
+
"CustomUnprocessedSegmentApiError4": "След като създадете сегмента в редактора (или чрез API), това съобщение за грешка ще изчезне и в рамките на няколко часа ще видите Вашите сегментирани отчетни данни, след като данните за сегмента са предварително обработени. (Ако не стане, може да има проблем.)",
|
3919 |
+
"CustomUnprocessedSegmentApiError5": "Моля, имайте предвид, че можете да тествате дали Вашият сегмент ще работи, без да се налага да чакате да бъде обработен, като използвате Live.getLastVisitsDetails API.",
|
3920 |
+
"CustomUnprocessedSegmentApiError6": "Когато използвате този метод на API, ще видите кои потребители и действия са съответствали на Вашия параметър &segment=.",
|
3921 |
+
"CustomUnprocessedSegmentNoData": "За да видите данни за този сегмент, трябва да създадете този сегмент ръчно в редактора на сегменти, след което да изчакате няколко часа, за да завърши предварителната обработка.",
|
3922 |
+
"DataAvailableAtLaterDate": "Вашите сегментирани аналитични отчети ще бъдат налични по-късно. Извиняваме се за причиненото неудобство.",
|
3923 |
"DefaultAllVisits": "Всички посещения",
|
3924 |
+
"DragDropCondition": "Състояние „Плъзгане & Пускане“",
|
3925 |
+
"HideMessageInFuture": "Скрийте това съобщение в бъдеще",
|
3926 |
"LoadingSegmentedDataMayTakeSomeTime": "Обработката на сегментирани данни за посетителите може да отнеме няколко минути…",
|
3927 |
"OperatorAND": "И",
|
3928 |
"OperatorOR": "ИЛИ",
|
3929 |
+
"PluginDescription": "Сегментът е набор от критерии, използвани за избор само на част от цял набор посещения. Използвайки сегменти може да се добави контекст към отчетите.",
|
3930 |
"SaveAndApply": "Запази & Приложи",
|
3931 |
"SegmentDisplayedAllWebsites": "всички сайтове",
|
3932 |
"SegmentDisplayedThisWebsiteOnly": "само този уебсайт",
|
3933 |
+
"SegmentIsDisplayedForWebsite": "и се обработват за",
|
3934 |
"SegmentNotApplied": "Сегмент '%s' не е приложен",
|
3935 |
+
"SegmentNotAppliedMessage": "Искате данни за персонализирания сегмент „%s“, тази конфигурация на Matomo понастоящем предотвратява обработката на отчети в реално време от съображения за ефективност.",
|
3936 |
+
"SegmentOperatorIsNotNullNorEmpty": "не е нула или празно",
|
3937 |
+
"SegmentOperatorIsNullOrEmpty": "е нула или празно",
|
3938 |
+
"SegmentXIsAUnionOf": "%s е обединение от тези сегменти:",
|
3939 |
+
"SelectSegmentOfVisits": "Изберете сегмент от посещения:",
|
3940 |
+
"SharedWithYou": "Споделено с Вас",
|
3941 |
+
"Test": "Тест",
|
3942 |
+
"ThisSegmentIsCompared": "Този сегмент в момента се сравнява.",
|
3943 |
+
"ThisSegmentIsSelectedAndCannotBeCompared": "Този сегмент е избран в момента, така че не може да бъде избран за сравнение.",
|
3944 |
"ThisSegmentIsVisibleTo": "Този сегмент е видим за:",
|
3945 |
+
"UnprocessedSegmentApiError1": "Сегментът „%1$s“ е настроен на „%2$s“, но Matomo в момента не е конфигуриран да обработва сегментирани отчети в заявки за API.",
|
3946 |
+
"UnprocessedSegmentApiError2": "За да видите данни за този отчет в бъдеще, ще трябва да редактирате сегмента си и да изберете опцията с етикет „%s“.",
|
3947 |
+
"UnprocessedSegmentApiError3": "След няколко часа Вашите сегментни данни трябва да станат достъпни чрез API. (Ако не стане, може да има проблем.)",
|
3948 |
+
"UnprocessedSegmentInVisitorLog1": "%1$sМеждувременно можете да използвате лога на посетителите %2$s, за да тествате дали Вашият сегмент ще съвпада правилно с потребителите Ви, като го приложите там.",
|
3949 |
+
"UnprocessedSegmentInVisitorLog2": "Когато се приложи, можете веднага да видите кои посещения и действия са съответствали на Вашия сегмент.",
|
3950 |
+
"UnprocessedSegmentInVisitorLog3": "Това може да ви помогне да потвърдите, че Вашият сегмент съответства на потребителите и действията, които очаквате.",
|
3951 |
+
"UnprocessedSegmentNoData1": "Тези отчети нямат данни, тъй като заявеният от Вас сегмент %1$s все още не е обработен от системата.",
|
3952 |
+
"UnprocessedSegmentNoData2": "Данните за този сегмент трябва да станат достъпни след няколко часа, когато обработката приключи. (Ако не стане, може да има проблем.)",
|
3953 |
"VisibleToAllUsers": "всички потребители",
|
3954 |
"VisibleToMe": "аз",
|
3955 |
+
"VisibleToSuperUser": "Вижда се за Вас, защото имате суперпотребителски достъп",
|
3956 |
+
"YouDontHaveAccessToCreateSegments": "Нямате необходимото ниво на достъп за създаване и редактиране на сегменти.",
|
3957 |
+
"YouMayChangeSetting": "Като алтернатива можете да промените настройката в конфигурационния файл (%1$s) или да редактирате този сегмент и да изберете „%2$s“.",
|
3958 |
+
"YouMustBeLoggedInToCreateSegments": "Трябва да сте вписани, за да създавате и редактирате персонализираните посетителски сегменти."
|
3959 |
},
|
3960 |
"SitesManager": {
|
3961 |
+
"AddMeasurable": "Добавяне на нова измерима величина",
|
3962 |
"AddSite": "Добави нов сайт",
|
3963 |
"AdvancedTimezoneSupportNotFound": "Разширена часова зона поддръжка не е намерена в PHP (поддържа в по-нова версия на PHP от 5.2 или точно 5.2). Все още можете да изберете ръчно UTC.",
|
3964 |
+
"AliasUrlHelp": "Препоръчително е, но не е задължително, да се уточнят различните URL адреси, по един на ред, че Вашите посетители имат достъп до този сайт. Наричани още URL адреси за сайта няма да се появяват в Референции > Сайтове. Имайте в предвид, че не е необходимо да се уточнят URL адреси със и без \\\"WWW\\\" като Matomo автоматично смята така.",
|
3965 |
"ChangingYourTimezoneWillOnlyAffectDataForward": "Промяната на часовата зона ще засегне само данни в бъдеще, и няма да се прилага със задна дата.",
|
3966 |
+
"ChooseMeasurableTypeHeadline": "Какво бихте искали да измерите?",
|
3967 |
"Currency": "Валута",
|
3968 |
"CurrencySymbolWillBeUsedForGoals": "Символът за валутата ще бъде показан на следващите целеви доходи.",
|
3969 |
+
"CustomizeJavaScriptTracker": "Персонализирайте проследяването на JavaScript",
|
3970 |
"DefaultCurrencyForNewWebsites": "Валута по подразбиране за нови уеб сайтове",
|
3971 |
"DefaultTimezoneForNewWebsites": "Времева зона по подразбиране за нови уеб сайтове",
|
3972 |
"DeleteConfirm": "Наистина ли желаете да изтриете този уеб сайт %s?",
|
3973 |
+
"DeleteSiteExplanation": "Изтриването на уебсайт ще изтрие всички данни от лога, които са били събрани за него. Това действие е перманентно и не може да бъде отменено.",
|
3974 |
+
"DetectingYourSite": "Откриване на Вашия сайт",
|
3975 |
"DisableSiteSearch": "Изключване на следенето за търсенията в сайта",
|
3976 |
"EcommerceHelp": "Когато са включени, \"Цели\", отчета ще има нова секция Електронна търговия.",
|
3977 |
+
"EmailInstructionsButton": "Изпратете тези инструкции по имейл",
|
3978 |
+
"EmailInstructionsDocsPlainText": "Ако искате да направите нещо повече от проследяване на показвания на страници, моля, разгледайте документацията на Matomo на адрес %1$s.",
|
3979 |
+
"EmailInstructionsGenerateTrackingCode": "Можете също така да генерирате персонализиран код за проследяване на %1$s.",
|
3980 |
+
"EmailInstructionsSiteDetails": "Ще Ви трябват тези подробности, за да използвате API или SDK за проследяване на посещенията на Matomo.",
|
3981 |
+
"EmailInstructionsSiteDetailsHeading": "Подробности за сайта Ви",
|
3982 |
+
"EmailInstructionsSubject": "Проследяващ код на Matomo Analytics",
|
3983 |
+
"EmailInstructionsYourSiteId": "Идентификатор на Вашия сайт: %1$s",
|
3984 |
+
"EmailInstructionsYourTrackingUrl": "Вашият проследяващ URL адрес: %1$s",
|
3985 |
"EnableEcommerce": "Електронна търговия включен",
|
3986 |
+
"EnableSiteSearch": "Проследяването на търсенето в сайта е активирано",
|
3987 |
"ExceptionDeleteSite": "Не е възможно да изтриете този сайт, защото той е единствения регистриран в системата. Преди да изтриете този сайт е нужно да добавите нов сайт.",
|
3988 |
"ExceptionEmptyName": "Полето за име на сайт не може да бъде празно.",
|
3989 |
"ExceptionInvalidCurrency": "Валутата \"%1$s\" не е валидна. Моля, въведете валиден символ за валутата (например %2$s)",
|
3990 |
+
"ExceptionInvalidIPFormat": "IP адресът за изключване \"%1$s\" не е във валиден IP формат (например %2$s).",
|
3991 |
"ExceptionInvalidTimezone": "Времевата зона \"%s\" не е валидна. Моля, въведете валидна времева зона.",
|
3992 |
"ExceptionInvalidUrl": "Адреса '%s' не е валиден.",
|
3993 |
"ExceptionNoUrl": "Необходимо е да въведете поне един адрес (URL) за сайта.",
|
3994 |
"ExcludedIps": "Изключени IP адреси",
|
3995 |
"ExcludedParameters": "Изключени параметри",
|
3996 |
+
"ExcludedUserAgents": "Изключени потребителски агенти",
|
3997 |
+
"ExtraInformationNeeded": "За да настроите Matomo на Вашата система, може да Ви е необходима следната информация:",
|
3998 |
+
"Format_Utc": "UTC%s",
|
3999 |
+
"GlobalExcludedUserAgentHelp1": "Въведете списъка с потребителски агенти, които да изключите от проследяване от Matomo.",
|
4000 |
+
"GlobalExcludedUserAgentHelp2": "Можете да използвате това, за да изключите някои ботове от проследяване.",
|
4001 |
+
"GlobalExcludedUserAgentHelp3": "Поддържат се регулярни изрази като %s.",
|
4002 |
"GlobalListExcludedIps": "Глобален списък на изключените IP адреси",
|
4003 |
"GlobalListExcludedQueryParameters": "Глобален списък на заявените URL параметри да се изключи",
|
4004 |
+
"GlobalListExcludedUserAgents": "Глобален списък с потребителски агенти за изключване",
|
4005 |
+
"GlobalListExcludedUserAgents_Desc": "Ако низът на потребителския агент на посетителя съдържа някой от низовете, които сте посочили, посетителят ще бъде изключен от Matomo.",
|
4006 |
+
"GlobalSettings": "Глобални настройки",
|
4007 |
"GlobalWebsitesSettings": "Глобални настройки на уеб сайтовете",
|
4008 |
+
"HelpExcludedIpAddresses": "Въведете списъка с IP адреси, по един на ред, които искате да изключите от проследяване от Matomo. Можете да използвате CIDR нотация, напр. %1$s или можете да използвате заместващи знаци, напр. %2$s или %3$s",
|
4009 |
+
"InstallationGuides": "Ръководства за инсталиране",
|
4010 |
+
"InstallationGuidesIntro": "Ние предоставяме ръководства стъпка по стъпка, обясняващи как да вградите проследяващия код за някои популярни CMS и създатели на уебсайтове:",
|
4011 |
+
"Integrations": "Интеграции",
|
4012 |
"JsTrackingTagHelp": "JavaScript кода, който трябва да вмъкнете във всички страници",
|
4013 |
+
"KeepURLFragments": "Проследяване на фрагменти от URL адреси на страницата",
|
4014 |
+
"KeepURLFragmentsHelp": "Ако квадратчето за отметка по-долу не е отметнато, фрагментите на URL адреса на страницата (всичко след %1$s) ще бъдат премахнати при проследяване: %2$s ще се проследява като %3$s",
|
4015 |
"KeepURLFragmentsHelp2": "Има възможност да отмените тази настройка за индивидуални уеб сайтове по-горе.",
|
4016 |
+
"KeepURLFragmentsLong": "Запазете фрагментите на URL адресите на страницата, когато проследявате URL адресите на страниците",
|
4017 |
"ListOfIpsToBeExcludedOnAllWebsites": "IP адресите по-долу ще бъдат изключени от броячите на всички сайтове.",
|
4018 |
"ListOfQueryParametersToBeExcludedOnAllWebsites": "Заявка на URL адресните параметри по-долу, ще бъдат изключени от URL адресите на всички уеб сайтове.",
|
4019 |
+
"ListOfQueryParametersToExclude": "Въведете списъка с параметри на URL заявката, по един на ред, за да изключите от отчетите за URL адреси на страници. Поддържат се регулярни изрази като %s.",
|
4020 |
+
"LogAnalytics": "Анализ на логове",
|
4021 |
+
"LogAnalyticsDescription": "Ако методът за проследяване на JavaScript не е осъществим, можете %1$s да използвате анализ на лог файлове на сървъра %2$s като алтернативен метод за проследяване на потребителите на Вашия уебсайт.",
|
4022 |
"MainDescription": "За да работи брояча е необходимо да добавите САЙТОВЕ! Добавете, редактирайте, изтрийте Сайт и вземете кода за вмъкване.",
|
4023 |
"MenuManage": "Управление",
|
4024 |
+
"MobileAppsAndSDKs": "Мобилни приложения и SDK",
|
4025 |
+
"MobileAppsAndSDKsDescription": "Не проследявате уебсайт? Като алтернатива можете да проследявате мобилно приложение или всеки друг тип приложение, като използвате един от %1$sналичните комплекти за разработване на софтуер (SDK)%2$s.",
|
4026 |
+
"NoWebsites": "Вие нямате сайт, който да администрирате.",
|
4027 |
"NotAnEcommerceSite": "Не сайт за Електронна търговия",
|
4028 |
"NotFound": "Не са намерени уеб сайтове",
|
4029 |
+
"OnlyMatchedUrlsAllowed": "Проследявайте посещенията и действията само когато URL адресът за действие започва с един от горните URL адреси.",
|
4030 |
+
"OnlyMatchedUrlsAllowedHelp": "Когато е активиран, Matomo ще проследява вътрешните действия само когато URL адресът на страницата е един от известните URL адреси за Вашия уебсайт. Това не позволява на хората да изпращат спам на Вашите анализи с URL адреси за други уебсайтове.",
|
4031 |
+
"OnlyMatchedUrlsAllowedHelpExamples": "Домейнът и пътят трябва да съвпадат точно и всеки валиден поддомейн трябва да бъде посочен отделно. Например, когато известните URL адреси са „http:\/\/example.com\/path“ и „http:\/\/good.example.com“, заявките за проследяване за „http:\/\/example.com\/otherpath“ или „http:\/ \/bad.example.com“ се игнорират.",
|
4032 |
"OnlyOneSiteAtTime": "Не можете да променяте едновременно два сайта. Моля Запазете или Откажете вашата текуща модификация на този уеб сайт %s.",
|
4033 |
"PiwikOffersEcommerceAnalytics": "Matomo позволява задълбочено проследяване и анализ на Електронна търговия. Научете повече относно %1$s Електронна търговия анализ %2$s.",
|
4034 |
"PiwikWillAutomaticallyExcludeCommonSessionParameters": "Matomo автоматично ще изключи общите параметри на сесията (%s).",
|
4035 |
+
"PluginDescription": "Управлението на уебсайтове Ви позволява да добавяте нов уебсайт и да редактирате съществуващи уебсайтове.",
|
4036 |
+
"SearchCategoryDesc": "Matomo може също да проследява категорията Търсене за всяка ключова дума за вътрешно търсене в сайта.",
|
4037 |
+
"SearchCategoryLabel": "Параметър на категорията",
|
4038 |
+
"SearchCategoryParametersDesc": "Можете да въведете разделен със запетая списък с параметри на заявката, указващи категорията за търсене.",
|
4039 |
"SearchKeywordLabel": "Параметър за заявката",
|
4040 |
"SearchKeywordParametersDesc": "Въведете списък, разделен със запетаи, за имената на всички заявки съдържащи търсени ключови думи в сайта.",
|
4041 |
+
"SearchParametersNote": "Забележка: Параметрите на заявката и параметрите на категорията ще се използват само за уебсайтове, които имат активирано търсене в сайта, но са оставили тези параметри празни.",
|
4042 |
+
"SearchParametersNote2": "За да деактивирате търсенето в сайта за нови уебсайтове, оставете тези две полета празни.",
|
4043 |
+
"SearchUseDefault": "Използвайте %1$sпо подразбиране%2$s параметри за търсене в сайта",
|
4044 |
"SelectACity": "Изберете град",
|
4045 |
"SelectDefaultCurrency": "Можете да изберете валута, за да зададете по подразбиране за нови уеб сайтове.",
|
4046 |
"SelectDefaultTimezone": "Можете да изберете времева зона, за да изберете по подразбиране за нови уеб сайтове.",
|
4047 |
"ShowTrackingTag": "покажи кода за вмъкване",
|
|
|
4048 |
"SiteSearchUse": "Можете да използвате Matomo да следи и докладва това, което посетителите търсят, посредством търсачката на сайта.",
|
4049 |
+
"SiteWithoutDataChoosePreferredWay": "Изберете предпочитания от Вас начин за настройка",
|
4050 |
+
"SiteWithoutDataDescription": "Трябва да добавите допълнителен код към Вашия уебсайт или мобилно приложение, ако все още не сте го направили. Проверете опцията си по-долу или %1$sизпратете всички инструкции на съотборник %2$s.",
|
4051 |
+
"SiteWithoutDataDetectedGtm": "Също така установихме, че използвате Мениджър на тагове на Google. Ако предпочитате да настроите Matomo чрез GTM, моля, следвайте това %2$sръководство%3$s.",
|
4052 |
+
"SiteWithoutDataDetectedSite": "Установихме, че използвате сайт %1$s. Просто следвайте инструкциите от това %2$sръководство%3$s.",
|
4053 |
+
"SiteWithoutDataGoogleTagManager": "Мениджър на тагове на Google",
|
4054 |
+
"SiteWithoutDataGoogleTagManagerDescription": "Можете да използвате Matomo с Google Tag Manager. За да настроите Matomo Tracking в Google Tag Manager, следвайте инструкциите от това %1$sръководство%2$s.",
|
4055 |
+
"SiteWithoutDataIgnoreMessage": "Не показвайте това съобщение през следващия час",
|
4056 |
+
"SiteWithoutDataMatomoTagManager": "Мениджър на тагове на Matomo",
|
4057 |
+
"SiteWithoutDataMatomoTagManagerNotActive": "Не знаете какво е Мениджър на тагове? Разгледайте нашето %1$sРъководство за мениджър на тагове%2$s. Ако вграждате множество ресурси от уебсайтове на трети страни в уебсайта си, тогава проследяването на уебсайта Ви чрез Мениджъра на тагове може да е по-добър избор за Вас в сравнение с използването на обикновеното проследяване на JavaScript.",
|
4058 |
+
"SiteWithoutDataMessageDisappears": "Това съобщение ще изчезне веднага щом се проследят някои данни за този уебсайт.",
|
4059 |
+
"SiteWithoutDataOtherIntegrations": "Други интеграции",
|
4060 |
+
"SiteWithoutDataOtherWays": "Други начини",
|
4061 |
+
"SiteWithoutDataSetupTracking": "Моля, настройте %1$sпроследяващия код%2$s по-долу във Вашия уебсайт или мобилно приложение, ако още не сте го направили.",
|
4062 |
+
"SiteWithoutDataSinglePageApplication": "Едностранично приложение или прогресивно уеб приложение",
|
4063 |
+
"SiteWithoutDataSinglePageApplicationDescription": "За едностранично приложение или прогресивно проследяване на уеб приложения. Вижте нашето %1$s ръководство %2$s.",
|
4064 |
+
"SiteWithoutDataTitle": "Само една последна стъпка, за да проследите трафика си с Matomo и да получите ценна информация",
|
4065 |
+
"Sites": "Сайтове",
|
4066 |
"SuperUserAccessCan": "Потребител с права „привилигирован потребител“ може да достъпва също %1$sзадаване на глобални настройки%2$s за новите сайтове.",
|
4067 |
"Timezone": "Часова зона",
|
4068 |
+
"TrackingSiteSearch": "Проследяване на вътрешно търсене в сайта",
|
4069 |
"TrackingTags": "Проследяване на етикети за %s",
|
|
|
4070 |
"Type": "Тип",
|
4071 |
"UTCTimeIs": "UTC часът е %s.",
|
4072 |
+
"Urls": "Адреси",
|
4073 |
+
"WebsiteCreated": "Създаден уебсайт",
|
4074 |
+
"WebsiteUpdated": "Уебсайтът е актуализиран",
|
4075 |
"WebsitesManagement": "Управление на сайтове",
|
4076 |
"XManagement": "Управление на %s",
|
4077 |
"YouCurrentlyHaveAccessToNWebsites": "В момента имате достъп до %s уебсайта.",
|
4109 |
"Version": "Версия"
|
4110 |
},
|
4111 |
"Tour": {
|
4112 |
+
"AddAnnotation": "Добавете пояснение",
|
4113 |
+
"AddReport": "Добавете насрочен отчет",
|
4114 |
+
"AddSegment": "Добавете сегмент",
|
4115 |
+
"AddUser": "Добавете друг потребител",
|
4116 |
+
"AddWebsite": "Добавете друг уебсайт",
|
4117 |
+
"BecomeMatomoExpert": "Станете експерт по Matomo",
|
4118 |
"BrowseMarketplace": "Разгледайте магазина",
|
4119 |
+
"ChallengeCompleted": "Поздравления, изпълнихте това предизвикателство.",
|
4120 |
+
"ChangeVisualisation": "Променете визуализация",
|
4121 |
+
"ChangeVisualisationDescription": "Прегледайте отчет и изберете иконата за визуализация в долната част на отчета, за да видите същия отчет в различна визуализация.",
|
4122 |
+
"CompletionMessage": "Изпълнихте всички предизвикателства. Потупайте се по гърба.",
|
4123 |
+
"CompletionTitle": "Браво!",
|
4124 |
+
"ConfigureGeolocation": "Конфигуриране на геолокация",
|
4125 |
+
"ConfigureGeolocationDescription": "Уверете се, че местоположението на Вашите посетители е правилно установено.",
|
4126 |
+
"CustomiseDashboard": "Персонализирайте таблото за управление",
|
4127 |
+
"CustomiseDashboardDescription": "Можете да добавяте нови приспособления към таблото си за управление, за да сте сигурни, че то отчита всичките Ви най-важни показатели.",
|
4128 |
+
"DefineGoal": "Добавете цел",
|
4129 |
+
"DefineGoalDescription": "Проследяването на реализациите е чудесен начин да определите дали постигате текущите си бизнес цели, да идентифицирате нови цели, да преглеждате и анализирате ефективността си и да научите как да увеличите реализациите, процента на реализация и приходите на посещение.",
|
4130 |
+
"DisableBrowserArchiving": "Деактивирайте архивирането на браузъра за по-добра производителност",
|
4131 |
+
"EmbedTrackingCode": "Вграждане на проследяващ код",
|
4132 |
+
"Engagement": "Ангажимент",
|
4133 |
+
"FlattenActions": "Изравняване на отчет за страница",
|
4134 |
+
"FlattenActionsDescription": "Отидете на Поведение => Страници и кликнете в долната част на отчета върху иконата на зъбно колело, за да изравните отчета. Изравненият отчет променя йерархията от групиран отчет в списък.",
|
4135 |
+
"MatomoBeginner": "Матомо начинаещ",
|
4136 |
+
"MatomoExpert": "Матомо експерт",
|
4137 |
+
"MatomoIntermediate": "Matomo средно ниво",
|
4138 |
+
"MatomoProfessional": "Матомо професионалист",
|
4139 |
+
"MatomoTalent": "Matomo талант",
|
4140 |
+
"NextChallenges": "Следващи предизвикателства",
|
4141 |
+
"OnlyVisibleToSuperUser": "Само Вие като %1$sСупер потребител%2$s можете да видите този уиджет.",
|
4142 |
+
"Part1Title": "Добре дошли в Matomo %1$s. Този уиджет ще Ви помогне да станете експерт по Matomo за нула време.",
|
4143 |
+
"Part2Title": "Продължавайте все така %1$s! Вие сте на път да станете експерт по Matomo.",
|
4144 |
+
"Part3Title": "Страхотен напредък %1$s! Ако продължите така, ще бъдете експерт за нула време!",
|
4145 |
+
"Part4Title": "Страхотен напредък %1$s! Остават само още няколко предизвикателства за изпълнение.",
|
4146 |
+
"PluginDescription": "Станете Matomo експерт като изпълните задачи, които Ви запознават с Matomo.",
|
4147 |
+
"PreviousChallenges": "Предишни предизвикателства",
|
4148 |
+
"RowEvolution": "Еволюция на редовете",
|
4149 |
+
"SelectDateRange": "Изберете период от време",
|
4150 |
+
"SelectDateRangeDescription": "Изберете период от време в календара.",
|
4151 |
+
"SetupX": "Настройка на %s",
|
4152 |
+
"ShareAllChallengesCompleted": "Току-що отключихте постижението %1$s, като завършихте всички предизвикателства на Matomo.",
|
4153 |
+
"ShareYourAchievementOn": "Споделете постижението си на %1$s.",
|
4154 |
+
"SkipThisChallenge": "Пропуснете това предизвикателство",
|
4155 |
+
"StatusLevel": "В момента сте %1$s. Изпълнете още %2$s предизвикателства и ще станете %3$s.",
|
4156 |
+
"Tour": "Тур",
|
4157 |
+
"UploadLogo": "Качете Вашето лого",
|
4158 |
+
"ViewRowEvolutionDescription": "Развитието на редовете Ви показва текущите и минали метрични данни за всеки ред във всеки отчет.",
|
4159 |
+
"ViewVisitorProfileDescription": "Логът на посетителите Ви помага да разберете индивидуалното поведение на Вашите посетители, като обобщава и изброява посещенията на Вашите посетители.",
|
4160 |
+
"ViewVisitsLogDescription": "Логът на посещенията Ви показва всички отделни посещения и действия, предприети от всеки посетител на Вашия сайт.",
|
4161 |
+
"ViewX": "Вижте %s",
|
4162 |
+
"YouCanCallYourselfExpert": "Вече можете да се наречете истински %1$sMatomo Expert%2$s."
|
4163 |
},
|
4164 |
"Transitions": {
|
4165 |
+
"AvailableInOtherReports": "Знаехте ли? Преходите също са налични като действие на ред в следните отчети:",
|
4166 |
+
"AvailableInOtherReports2": "Просто задръжте курсора на мишката върху ред в някой от тези отчети и щракнете върху иконата за преход %s, за да го стартирате.",
|
4167 |
"BouncesInline": "%s еднократни посещения",
|
4168 |
"DirectEntries": "Директни посещения",
|
4169 |
"ErrorBack": "Върнете се на предишната страница",
|
4170 |
"ExitsInline": "%s изходи",
|
4171 |
+
"FeatureDescription": "Transitions Ви дава отчет, който показва нещата, които посетителите Ви са правили директно преди и след преглед на определена страница. Тази страница ще обясни как да получите достъп, да разберете и използвате мощния отчет за преходи.",
|
4172 |
"FromCampaigns": "От кампании",
|
4173 |
"FromPreviousPages": "От вътрешни страници",
|
4174 |
"FromPreviousPagesInline": "%s от вътреши страници",
|
4175 |
"FromPreviousSiteSearches": "От вътрешни търсения",
|
4176 |
"FromPreviousSiteSearchesInline": "%s от вътрешни търсения",
|
4177 |
"FromSearchEngines": "От търсещи машини",
|
4178 |
+
"FromSocialNetworks": "От социални мрежи",
|
4179 |
"FromWebsites": "От уебсайтове",
|
4180 |
"IncomingTraffic": "Входящ трафик",
|
4181 |
"LoopsInline": "%s страница се презарежда",
|
4182 |
"NoDataForAction": "Няма информация за %s",
|
4183 |
+
"NoDataForActionDetails": "Или действието няма показвания на страници през периода %s, или е невалидно.",
|
4184 |
+
"NumDownloads": "%s изтегляния",
|
4185 |
+
"NumOutlinks": "%s препращания",
|
4186 |
+
"NumPageviews": "%s показвания на страници",
|
4187 |
"OutgoingTraffic": "Изходящ трафик",
|
4188 |
+
"PageURLTransitions": "URL преходи на страницата",
|
4189 |
+
"PeriodNotAllowed": "Неразрешен период от време",
|
4190 |
+
"PeriodNotAllowedDetails": "Тази функционалност не е налична за този период, опитайте да изберете период с по-малко дни",
|
4191 |
+
"PluginDescription": "Отчита предишни и следващи действия за URL адрес на всяка страница в нов отчет за преходи, достъпен в отчетите за действия чрез нова икона.",
|
4192 |
"ShareOfAllPageviews": "Тази страница има %1$s разглеждания (от всички %2$s разглеждания)",
|
4193 |
"ToFollowingPages": "Към вътрешни страници",
|
4194 |
"ToFollowingPagesInline": "%s за вътрешни страници",
|
4195 |
"ToFollowingSiteSearches": "Външни търсения",
|
4196 |
"ToFollowingSiteSearchesInline": "%s вътрешни търсения",
|
4197 |
+
"TopX": "Топ %s етикети",
|
4198 |
+
"Transitions": "Преходи",
|
4199 |
+
"TransitionsSubcategoryHelp1": "Transitions Ви дава отчет, който показва нещата, които посетителите Ви са правили директно преди и след преглед на определена страница. Тази страница ще обясни как да получите достъп, да разберете и използвате мощния отчет за преходи.",
|
4200 |
+
"TransitionsSubcategoryHelp2": "Детайли",
|
4201 |
"XOfAllPageviews": "%s на всички показания за тази страница",
|
4202 |
+
"XOutOfYVisits": "%1$s (от %2$s)"
|
4203 |
+
},
|
4204 |
+
"TwoFactorAuth": {
|
4205 |
+
"AskSuperUserResetAuthenticationCode": "Помолете супер потребителя да нулира Вашия код за автентикиране",
|
4206 |
+
"AuthenticationCode": "Код за автентикация",
|
4207 |
+
"ConfigureDifferentDevice": "Конфигурирайте друго устройство",
|
4208 |
+
"ConfirmDisableTwoFA": "Наистина ли искате да деактивирате двуфакторната автентикация за Вашия акаунт? Активирането на двуфакторна автентикация повишава сигурността на Вашия акаунт.",
|
4209 |
+
"ConfirmSetup": "Потвърдете настройката",
|
4210 |
+
"DisableTwoFA": "Деактивирайте двуфакторната автентикация",
|
4211 |
+
"DontHaveYourMobileDevice": "Нямате достъп до мобилното си устройство?",
|
4212 |
+
"EnableTwoFA": "Активирайте двуфакторната автентикация",
|
4213 |
+
"EnterRecoveryCodeInstead": "Въведете един от Вашите кодове за възстановяване",
|
4214 |
+
"GenerateNewRecoveryCodes": "Генерирайте нови кодове за възстановяване",
|
4215 |
+
"GenerateNewRecoveryCodesInfo": "Когато генерирате нови кодове за възстановяване, старите Ви кодове вече няма да работят. Не забравяйте да изтеглите или отпечатате новите си кодове.",
|
4216 |
+
"InvalidAuthCode": "Кодът за двуфакторна автентикация не е правилен.",
|
4217 |
+
"LostAuthenticationDevice": "Здравейте, %1$sИмам активирана двуфакторна автентикация и загубих устройството си за удостоверяване. Можете ли да нулирате двуфакторната автентикация за моето потребителско име %5$s? Можете да намерите инструкциите за това тук: %6$s.%2$sURL адресът на Matomo е %3$s.%4$sБлагодаря Ви",
|
4218 |
+
"MissingAuthCodeAPI": "Моля, посочете код за двуфакторна автентикация.",
|
4219 |
+
"NotPossibleToLogIn": "Не мога да вляза в Matomo Analytics",
|
4220 |
+
"RecoveryCodes": "Кодове за възстановяване",
|
4221 |
+
"RecoveryCodesAllUsed": "Използвани са всички кодове за възстановяване, силно се препоръчва да регенерирате кодовете си за възстановяване.",
|
4222 |
+
"RecoveryCodesExplanation": "Можете да използвате кодове за възстановяване за достъп до акаунта си, когато не можете да получите двуфакторни кодове за автентикация, например когато нямате мобилното си устройство със себе си.",
|
4223 |
+
"RecoveryCodesRegenerated": "Кодовете за възстановяване са регенерирани. Не забравяйте да изтеглите или отпечатате новогенерираните кодове.",
|
4224 |
+
"RecoveryCodesSecurity": "Моля, третирайте кодовете си за възстановяване със същото ниво на сигурност, както и паролата си!",
|
4225 |
+
"RequireTwoFAForAll": "Изисквайте двуфакторна автентикация за всички",
|
4226 |
+
"RequireTwoFAForAllInformation": "Когато е активирано, всеки потребител трябва да активира двуфакторна автентикация. Прилагането на 2FA ще изисква всички потребители да имат достъп до устройство, където могат да инсталират приложение за автентикиране. Можете да активирате това само ако вече сте настроили сами двуфакторна автентикация.",
|
4227 |
+
"RequiredAuthCodeNotConfiguredAPI": "От Вас се изисква да настроите двуфакторна автентикация. Моля, влезте в акаунта си.",
|
4228 |
+
"RequiredToSetUpTwoFactorAuthentication": "От Вас се изисква да настроите двуфакторна автентикация, преди да можете да влезете",
|
4229 |
+
"SetUpTwoFactorAuthentication": "Настройте двуфакторната автентикация (2FA)",
|
4230 |
+
"SetupAuthenticatorOnDevice": "Настройте автентикатор на Вашето устройство",
|
4231 |
+
"SetupAuthenticatorOnDeviceStep1": "Инсталирайте приложение за автентикиране, например:",
|
4232 |
+
"SetupAuthenticatorOnDeviceStep2": "След това отворете приложението и сканирайте долния баркод с приложението за двуфакторна автентикация на телефона си. Ако не можете да сканирате баркода, %1$s вместо това въведете този код %2$s.",
|
4233 |
+
"SetupBackupRecoveryCodes": "Моля, архивирайте Вашите кодове за възстановяване, като използвате един от горните методи, преди да продължите с настройката за двуфакторна автентикация.",
|
4234 |
+
"SetupFinishedSubtitle": "Успешно сте настроили двуфакторна автентикация. Следващия път, когато влезете, ще трябва да въведете и кода за удостоверяване. Уверете се, че имате мобилното си устройство или резервните си кодове със себе си.",
|
4235 |
+
"SetupFinishedTitle": "Честито! Вашият акаунт вече е по-сигурен.",
|
4236 |
+
"SetupIntroFollowSteps": "Моля, следвайте тези стъпки, за да настроите двуфакторна автентикация:",
|
4237 |
+
"ShowRecoveryCodes": "Показване на кодове за възстановяване",
|
4238 |
+
"StepX": "Стъпка %s",
|
4239 |
+
"TwoFAShort": "2-факторна автентикация",
|
4240 |
+
"TwoFactorAuthentication": "Двуфакторна автентикация",
|
4241 |
+
"TwoFactorAuthenticationIntro": "%1$sДвуфакторната автентикация %2$s повишава сигурността на Вашия акаунт, като добавя допълнителен слой за проверка, когато влизате. Всеки път, когато влезете, не само ще бъдете помолени да предоставите Вашето потребителско име и парола, но и допълнителен идентификационен токен, който се променя периодично и се генерира например на Вашето мобилно устройство. Това означава, че дори когато някой знае Вашето потребителско име и парола, той пак няма да може да влезе, освен ако няма достъп и до Вашето мобилно устройство например.",
|
4242 |
+
"TwoFactorAuthenticationIsDisabled": "В момента двуфакторната автентикация е деактивирана.",
|
4243 |
+
"TwoFactorAuthenticationIsEnabled": "В момента е активирана двуфакторна автентикация.",
|
4244 |
+
"TwoFactorAuthenticationRequired": "Двуфакторната автентикация е необходимо да бъде активирана за всички, не можете да я деактивирате.",
|
4245 |
+
"Verify": "Потвърдете",
|
4246 |
+
"VerifyAuthCodeHelp": "Моля, въведете шестцифрения код, който е генериран на Вашето мобилно устройство след сканиране на баркода.",
|
4247 |
+
"VerifyAuthCodeIntro": "Моля, въведете шестцифрения код от Вашето приложение за автентикиране по-долу, за да потвърдите, че сте настроили успешно Вашето устройство.",
|
4248 |
+
"VerifyIdentifyExplanation": "Отворете приложението за двуфакторна автентикация на Вашето устройство, за да видите своя код за удостоверяване и да потвърдите самоличността си.",
|
4249 |
+
"WarningChangingConfiguredDevice": "На път сте да промените конфигурираното устройство за двуфакторна автентикация. Това ще анулира всяко предварително конфигурирано устройство.",
|
4250 |
+
"WrongAuthCodeTryAgain": "Въведен е грешен код за удостоверяване. Моля, опитайте отново.",
|
4251 |
+
"Your2FaAuthSecret": "Вашата тайна за двуфакторна автентикация"
|
4252 |
},
|
4253 |
"UserCountry": {
|
4254 |
"CannotLocalizeLocalIP": "IP адрес %s е вътрешен (частен) адрес и не може да бъде определено местоположението му.",
|
4255 |
"City": "Град",
|
4256 |
"CityAndCountry": "%1$s, %2$s",
|
4257 |
"Continent": "Континент",
|
4258 |
+
"Continents": "Континенти",
|
4259 |
"Country": "Държава",
|
4260 |
+
"CountryCode": "Код на държава",
|
|
|
|
|
|
|
4261 |
"CurrentLocationIntro": "Според текущия доставчик, вашето местоположение е",
|
4262 |
"DefaultLocationProviderDesc1": "Доставчикът по подразбиране, определящ местоположението, отгатва държавата, от която е посетителят, на базата на използвания език.",
|
4263 |
+
"DefaultLocationProviderDesc2": "Това не е много точно, така че %1$sпрепоръчваме да инсталирате и използвате %2$sбаза данни за геолокация %3$s.%4$s",
|
4264 |
"DefaultLocationProviderExplanation": "Използва се доставчикът по подразбиране, което означава, че Matomo ще определя местоположението на посетителите спрямо езика, който те използват. %1$sПрочетете това%2$s, за да научите как се настройва по-точен метод за определяне на местоположението.",
|
4265 |
+
"DisabledLocationProvider": "Деактивира геолокацията.",
|
4266 |
"DistinctCountries": "%s отделни държави",
|
4267 |
"FromDifferentCities": "различни градове",
|
4268 |
+
"GeoIPDocumentationSuffix": "За да видите данните за този отчет, трябва да настроите GeoIP в раздела Администриране на Геолокация. Комерсиалните %1$sMaxmind%2$s GeoIP бази данни са по-точни от безплатните. За да видите колко са точни, щракнете %3$s тук %4$s.",
|
4269 |
+
"GeoIpDbIpAccuracyNote": "Забележка: DBIP базите данни са безплатни и могат да се изтеглят автоматично, но резултатите от геолокацията (по-специално резултатите за градове) не са толкова точни като тези на MaxMind. MaxMind обаче изисква да създадете акаунт дори за безплатната база данни. Ако искате да използвате базата данни за геолокация на MaxMind, можете да започнете процеса %1$s тук %2$s",
|
4270 |
"Geolocation": "Геолокация",
|
4271 |
"GeolocationPageDesc": "В тази страница може да се промени начинът, по който Matomo определя местоположението на посетителите.",
|
4272 |
+
"GeolocationProviderBroken": "Конфигурираният доставчик на геолокация %1$s е повреден. Моля, коригирайте доставчика или конфигурирайте друг, за да може геолокацията да работи отново.",
|
4273 |
+
"GeolocationProviderUnavailable": "Конфигурираният доставчик на геолокация %1$s вече не е наличен, моля, конфигурирайте друг.",
|
4274 |
+
"HowToInstallGeoIPDatabases": "Как да получа бази данни за геолокация?",
|
|
|
4275 |
"Latitude": "Географска ширина",
|
4276 |
+
"Latitudes": "Географски ширини",
|
4277 |
"Location": "Място",
|
4278 |
"LocationProvider": "Местоположение на доставчика",
|
4279 |
+
"LocationsSubcategoryHelp": "Разделът Местоположения е най-добрият начин да разберете къде се намират хората, когато посещават сайта Ви. Той разкрива страните, континентите, регионите, градовете, от които идват Вашите посетители, под формата на таблици и карта. Освен това можете да видите на какъв език е настроен браузърът им, което помага да се идентифицират международни посетители.",
|
4280 |
"Longitude": "Географска дължина",
|
4281 |
+
"Longitudes": "Географски дължини",
|
4282 |
+
"MaxMindLinkExplanation": "Ако използвате базите данни за геолокация на MaxMind и все още не знаете как да генерирате URL за изтегляне, %1$sкликнете тук, за да научите как%2$s.",
|
4283 |
"NoDataForGeoIPReport1": "Няма данни за този доклад, защото или няма информация за местоположението, или IP адресът на посетителя не може да бъде определен къде се намира.",
|
4284 |
"NoDataForGeoIPReport2": "За да бъде активирано по-точно определяне на местоположението е нужно да се променят настройките %1$sтук%2$s и да се използва %3$sбази данни на ниво град%4$s.",
|
4285 |
+
"NoProviders": "Понастоящем няма налични допълнителни доставчици на геолокация. Matomo препоръчва използването на базите данни %1$sdbip%2$s, но това изисква активиране на приставката GeoIp2. (Алтернативно можете да инсталирате плъгин на трета страна, който предоставя собствена функционалност за геолокация от Marketplace.)",
|
4286 |
+
"PluginDescription": "Отчита местоположението на Вашите посетители: държава, регион, град и географски координати (географска ширина\/дължина).",
|
4287 |
"Region": "Регион",
|
4288 |
"SubmenuLocations": "Местонахождение",
|
4289 |
+
"TestIPLocatorFailed": "Matomo се опита да провери местоположението на известен IP адрес (%1$s), но сървърът Ви не върна никаква информация. Този доставчик може да не е конфигуриран правилно (базата данни за геолокация може да бъде наречена неправилно или да се намира в грешна директория, например).",
|
4290 |
"ToGeolocateOldVisits": "За да получите информация за предишни посещения, използвайте скриптът описан %1$sтук%2$s.",
|
4291 |
+
"VisitLocation": "Местонахождение на посещението",
|
4292 |
+
"WidgetLocation": "Местонахождение на посетителя",
|
4293 |
+
"country_a1": "Анонимно прокси",
|
4294 |
+
"country_a2": "Сателитен доставчик",
|
4295 |
+
"country_cat": "Каталонски-говорящите общности",
|
4296 |
+
"country_o1": "Друга държава",
|
4297 |
+
"getCityDocumentation": "Този отчет показва в кои градове са се намирали вашите посетители, при достъпването на сайта.",
|
4298 |
+
"getContinentDocumentation": "Този отчет показва кое съдържание са разглеждали вашите посетители, при достъпването на сайта.",
|
4299 |
+
"getCountryDocumentation": "Този отчет показва в коя държава са се намирали вашите посетители, при достъпването на сайта.",
|
4300 |
+
"getRegionDocumentation": "Този отчет показва къде са се намирали вашите посетители, при достъпването на сайта."
|
4301 |
},
|
4302 |
"UserCountryMap": {
|
4303 |
"AndNOthers": "и %s други",
|
4308 |
"HoursAgo": "преди %s часа",
|
4309 |
"MinutesAgo": "преди %s минути",
|
4310 |
"NoVisit": "Няма посещения",
|
4311 |
+
"NoVisitsInfo": "В момента няма показани посещения, тъй като нито едно посещение за този период няма точната информация за геолокацията (географска ширина и дължина).",
|
4312 |
+
"NoVisitsInfo2": "За да разрешите този проблем, уверете се, че използвате доставчик на геолокация с градска база данни GeoIP. Ако това не разреши проблема Ви, тогава е възможно (макар и малко вероятно) Вашите посещения да имат IP адреси, които просто не могат да бъдат геолокирани.",
|
4313 |
"None": "Няма",
|
4314 |
+
"PluginDescription": "Този плъгин предоставя уиджетите Карта на посетителите и Карта в реално време. Забележка: Изисква активиран плъгин UserCountry.",
|
4315 |
"RealTimeMap": "Карта на посетителите в реално време",
|
4316 |
+
"RealTimeMapHelp": "Картата в реално време показва местоположението на посетителите на Вашия сайт през последните 30 минути. Големите оранжеви \"балони\" представляват по-скорошни посещения, докато по-малките сиви \"балончета\" представляват по-стари посещения. Тези данни се обновяват на всеки 5 секунди и се появяват нови посетители с мигащ ефект.",
|
4317 |
"Regions": "Региони",
|
4318 |
"Searches": "%s търсения",
|
4319 |
"SecondsAgo": "преди %s секунди",
|
4320 |
"ShowingVisits": "Последни посещения базирани на географско местоположение",
|
4321 |
+
"Unlocated": "<b>%1$s<\/b> %2$s посещения от %3$s вашето местоположение не може да бъде открито.",
|
4322 |
"VisitorMap": "Карта на посетителите",
|
4323 |
+
"WithUnknownCity": "%s с неизвестен град",
|
4324 |
+
"WithUnknownRegion": "%s с неизвестен регион",
|
4325 |
"WorldWide": "По целия свят",
|
4326 |
"map": "карта"
|
4327 |
},
|
4328 |
"UserId": {
|
4329 |
+
"PluginDescription": "Показва потребителски отчети",
|
4330 |
+
"ThereIsNoDataForThisReportHelp": "%1$sНаучете повече за това как да генерирате данни за този отчет в нашето ръководство за потребителя.%2$s",
|
4331 |
+
"UserId": "Потребителско ID",
|
4332 |
+
"UserReportDocumentation": "Този отчет показва посещения и други общи показатели за всеки отделен User ID.",
|
4333 |
+
"UserReportTitle": "Потребители",
|
4334 |
+
"VisitorsUserSubcategoryHelp": "Отчетът за потребителски идентификатори показва посещения, свързани с всички Ваши регистрирани и влезли потребители. Можете да използвате този раздел, за да разберете използването на уебсайта от конкретни потребители и да определите кои са най-активните и най-малко активните Ви потребители."
|
4335 |
},
|
4336 |
"UserLanguage": {
|
4337 |
"BrowserLanguage": "Език на браузъра",
|
4338 |
+
"LanguageCode": "Код на езика",
|
4339 |
+
"PluginDescription": "Отчита езика, използван от браузърите на Вашите посетители.",
|
4340 |
+
"getLanguageCodeDocumentation": "Този отчет показва на кой езиков код е зададен браузърът на посетителя. (напр. „немски - Австрия (de-at)“)",
|
4341 |
+
"getLanguageDocumentation": "Този отчет показва кой език използват браузърите на посетителите. (напр. \"английски\")"
|
4342 |
},
|
4343 |
"UsersManager": {
|
4344 |
+
"2FA": "2-факторна автентикация",
|
4345 |
+
"AddExistingUser": "Добавете съществуващ потребител",
|
4346 |
+
"AddNewUser": "Добавете нов потребител",
|
4347 |
+
"AddSuperuserAccessConfirm": "Предоставянето на достъп на супер потребител на потребителя ще му позволи да има пълен контрол над Matomo и трябва да се прави внимателно. Въведете паролата си, за да продължите.",
|
4348 |
"AddUser": "Добави нов потребител",
|
4349 |
+
"AddUserNoInitialAccessError": "На новите потребители трябва да бъде предоставен достъп до уебсайт, моля, задайте параметъра 'initialIdSite'.",
|
4350 |
+
"AllUsersAreSelected": "Всички потребители на %1$s са избрани.",
|
4351 |
"AllWebsites": "Всички сайтове",
|
4352 |
+
"AllWebsitesAreSelected": "Всички %1$s уебсайтове са избрани.",
|
4353 |
+
"AnonymousAccessConfirmation": "На път сте да предоставите на анонимния потребител „преглед“ достъп до този уебсайт. Това означава, че Вашите аналитични отчети и информацията за посетителите Ви ще бъдат публично видими от всеки, дори и без вход. Сигурни ли сте, че искате да продължите?",
|
4354 |
+
"AnonymousUser": "Анонимен потребител",
|
4355 |
"AnonymousUserHasViewAccess": "Забележка: потребител %1$s има %2$s достъп до този сайт.",
|
4356 |
"AnonymousUserHasViewAccess2": "Аналитичните доклади и информацията за посетителите, са публично видими.",
|
4357 |
+
"AnonymousUserRoleChangeWarning": "Предоставянето на потребителя на %1$s ролята %2$s ще направи данните на този уебсайт публични и достъпни за всички, дори ако нямат потребителско име в Matomo.",
|
4358 |
"ApplyToAllWebsites": "Запомни за всички сайтове",
|
4359 |
+
"AreYouSure": "Сигурни ли сте?",
|
4360 |
+
"AreYouSureAddCapability": "Сигурни ли сте, че искате да дадете на %1$s възможността %2$s за %3$s?",
|
4361 |
+
"AreYouSureChangeDetails": "Наистина ли искате да промените потребителската информация за %s?",
|
4362 |
+
"AreYouSureRemoveCapability": "Наистина ли искате да премахнете възможността %1$s от %2$s за %3$s?",
|
4363 |
+
"AtLeastView": "Виждане поне",
|
4364 |
+
"AuthTokenPurpose": "За какво използвате този токен?",
|
4365 |
+
"AuthTokens": "Токени за удостоверяване",
|
4366 |
+
"BasicInformation": "Основна информация",
|
4367 |
+
"BulkActions": "Групови действия",
|
4368 |
+
"Capabilities": "Възможности",
|
4369 |
+
"CapabilitiesHelp": "Възможностите са индивидуални способности, които могат да бъдат предоставени на потребителите. Ролите могат по подразбиране да предоставят определени възможности. Например ролята на администратор автоматично ще позволи на потребителите да редактират тагове в Мениджъра на тагове. За по-малко мощни потребители обаче можете изрично да дадете на потребителите възможности.",
|
4370 |
+
"Capability": "Възможност",
|
4371 |
+
"ChangeAllConfirm": "Наистина ли искате да дадете на „%s“ достъп до всички уебсайтове?",
|
4372 |
+
"ChangePermToAllSitesConfirm": "Наистина ли искате да дадете на потребителя %1$s %2$s достъп до всеки уебсайт, до който в момента имате администраторски достъп?",
|
4373 |
+
"ChangePermToAllSitesConfirm2": "Забележка: това ще засегне само съществуващите в момента уебсайтове. Новите уебсайтове, които може да създадете, няма да бъдат автоматично достъпни за този потребител.",
|
4374 |
+
"ChangePermToSiteConfirmMultiple": "Наистина ли искате да промените ролята на %1$s на %2$s избраните уебсайтове на %3$s?",
|
4375 |
+
"ChangePermToSiteConfirmSingle": "Наистина ли искате да промените ролята на %1$s на %2$s на %3$s?",
|
4376 |
"ClickHereToDeleteTheCookie": "Натиснете тук, за да изтриете бисквитката и Matomo да отчита Вашите посещения",
|
4377 |
"ClickHereToSetTheCookieOnDomain": "Натиснете тук, за да зададете бисквитка, която ще Ви гарантира, че Вашите посещения няма да се отчитат от Matomo в %s",
|
4378 |
+
"ClickToSelectAll": "Кликнете, за да изберете всички %1$s.",
|
4379 |
+
"ClickToSelectDisplayedUsers": "Кликнете, за да изберете показаните потребители %1$s.",
|
4380 |
+
"ClickToSelectDisplayedWebsites": "Кликнете, за да изберете показаните уебсайтове %1$s.",
|
4381 |
+
"ConfirmGrantSuperUserAccess": "Наистина ли искате да предоставите на „%s“ суперпотребителски достъп? Предупреждение: потребителят ще има достъп до всички уебсайтове и ще може да изпълнява административни действия.",
|
4382 |
+
"ConfirmProhibitMySuperUserAccess": "%s, наистина ли искате да премахнете собствения си суперпотребителски достъп? Ще загубите всички разрешения и достъп до всички уебсайтове и ще излезете от Matomo.",
|
4383 |
+
"ConfirmProhibitOtherUsersSuperUserAccess": "Наистина ли искате да премахнете достъпа на супер потребител от „%s“? Потребителят ще загуби всички разрешения и достъп до всички уебсайтове. Не забравяйте да предоставите достъп до необходимите уебсайтове след това, ако е необходимо.",
|
4384 |
+
"ConfirmTokenCopied": "Потвърждавам, че копирах токена и разбирам, че не трябва да споделям този токен с никой друг.",
|
4385 |
+
"ConfirmWithPassword": "Моля, въведете паролата си, за да потвърдите тази промяна.",
|
4386 |
+
"CreateNewToken": "Създайте нов токен",
|
4387 |
+
"CreateUser": "Създаване на потребител",
|
4388 |
+
"CurrentPasswordNotCorrect": "Текущата парола, която сте въвели, не е правилна.",
|
4389 |
+
"DeleteAllTokens": "Изтрийте всички токени",
|
4390 |
"DeleteConfirm": "Наистина ли искате да изтриете потребителя %s?",
|
4391 |
+
"DeletePermConfirmMultiple": "Наистина ли искате да премахнете достъпа на %1$s до избраните уебсайтове на %2$s?",
|
4392 |
+
"DeletePermConfirmSingle": "Наистина ли искате да премахнете достъпа на %1$s до %2$s?",
|
4393 |
+
"DeleteUserConfirmMultiple": "Наистина ли искате да изтриете избраните потребители %1$s?",
|
4394 |
+
"DeleteUserConfirmSingle": "Наистина ли искате да изтриете %1$s?",
|
4395 |
+
"DeleteUserPermConfirmMultiple": "Наистина ли искате да промените ролята на избрания потребител на %1$s на %2$s за %3$s?",
|
4396 |
+
"DeleteUserPermConfirmSingle": "Наистина ли искате да промените ролята на %1$s на %2$s за %3$s?",
|
4397 |
+
"DeleteUsers": "Изтриване на потребители",
|
4398 |
+
"DoNotStoreToken": "Не споделяйте този токен с никой друг, тъй като той е толкова таен, колкото Вашето потребителско име и парола.",
|
4399 |
+
"EditUser": "Редактиране на потребител",
|
4400 |
"Email": "Имейл",
|
4401 |
+
"EmailChangeNotificationSubject": "Имейл адресът на Вашия акаунт в Matomo току-що е променен",
|
4402 |
+
"EmailChangedEmail1": "Имейл адресът, свързан с Вашия акаунт, е променен на %1$s",
|
4403 |
+
"EmailChangedEmail2": "Тази промяна е инициирана от следното устройство: %1$s (IP адрес = %2$s).",
|
4404 |
"EmailYourAdministrator": "%1$sПишете на администратора Ви за този проблем%2$s.",
|
4405 |
+
"EnterUsernameOrEmail": "Въведете потребителско име или имейл адрес",
|
4406 |
+
"ExceptionAccessValues": "Достъпът до параметър трябва да има една от следните стойности: [ %1$s ], '%2$s' са дадени.",
|
4407 |
+
"ExceptionAnonymousAccessNotPossible": "Можете да зададете достъп %1$s или %2$s само на „анонимния“ потребител.",
|
4408 |
+
"ExceptionAnonymousNoCapabilities": "Не можете да предоставите никакви възможности на „анонимния“ потребител.",
|
4409 |
"ExceptionDeleteDoesNotExist": "Потребителя '%s' не съществува, по тази причина не може да бъде изтрит.",
|
4410 |
"ExceptionDeleteOnlyUserWithSuperUserAccess": "Изтриването на потребител '%s' не е възможно.",
|
4411 |
"ExceptionEditAnonymous": "Анонимният потребител не може да бъде редактиран или изтрит. Matomo по този начин дефинира в система потребители, които не са влезли. Например можете да направите данните на брояча ви публични, като зададете 'преглед' права на 'анонимен' потребител.",
|
4412 |
"ExceptionEmailExists": "Потребител с имейл '%s' вече съществува.",
|
4413 |
+
"ExceptionEmailExistsAsLogin": "Имейлът „%s“ вече се използва като потребителско име.",
|
4414 |
"ExceptionInvalidEmail": "Е-пощата, който сте въвели не е валиден.",
|
4415 |
+
"ExceptionInvalidLoginFormat": "Потребителското име трябва да е с дължина между %1$s и %2$s знаци и да съдържа само букви, цифри или знаците '_' или '-' или '.' или '@' или '+'",
|
4416 |
+
"ExceptionInvalidPassword": "Дължината на паролата трябва да е по-голяма от %1$s знака.",
|
4417 |
+
"ExceptionInvalidPasswordTooLong": "Дължината на паролата трябва да бъде по-малка от %1$s знака.",
|
4418 |
+
"ExceptionLoginExists": "Потребителско име „%s“ вече съществува.",
|
4419 |
+
"ExceptionLoginExistsAsEmail": "Потребителско име „%s“ вече се използва като имейл.",
|
4420 |
+
"ExceptionMultipleRoleSet": "Може да бъде зададена само една роля, но са зададени няколко. Използвайте само едно от: %s",
|
4421 |
+
"ExceptionNoRoleSet": "Не е зададена роля, но трябва да бъде зададена една от тях: %s",
|
4422 |
+
"ExceptionNoValueForUsernameOrEmail": "Моля, въведете потребителско име или имейл адрес.",
|
4423 |
"ExceptionPasswordMD5HashExpected": "UsersManager.getTokenAuth очаква MD5-хеширана парола (32 символа дълъг низ). Моля, извикайте md5() функцията на паролата преди да извикате този метод.",
|
4424 |
"ExceptionRemoveSuperUserAccessOnlySuperUser": "Премахването на права на привилигирован потребител за потребител '%s' не е възможно.",
|
4425 |
+
"ExceptionSuperUserAccess": "Този потребител има суперпотребителски достъп и вече има разрешение за достъп и промяна на всички уебсайтове в Matomo. Можете да премахнете достъпа на супер потребител от този потребител и да опитате отново.",
|
4426 |
"ExceptionUserDoesNotExist": "Потребителя '%s' не съществува.",
|
4427 |
+
"ExceptionUserHasSuperUserAccess": "Потребителят „%s“ има суперпотребителски достъп и вече има разрешение за достъп и промяна на всички уебсайтове в Matomo. Можете да премахнете достъпа на супер потребител от този потребител и да опитате отново.",
|
4428 |
+
"ExceptionUserHasViewAccessAlready": "Този потребител вече има достъп до този уебсайт.",
|
4429 |
"ExceptionYouMustGrantSuperUserAccessFirst": "Трябва да съществува поне един привилигирован потребител. Моля, дайде нужните права на друг потребител.",
|
4430 |
"ExcludeVisitsViaCookie": "Изключете Вашите посещения с помощта на бисквитка",
|
4431 |
+
"ExpireDate": "Краен срок",
|
4432 |
+
"ExpiredTokensDeleteAutomatically": "Токените с дата на изтичане ще бъдат изтрити автоматично.",
|
4433 |
+
"FilterByAccess": "Филтриране по достъп",
|
4434 |
+
"FilterByWebsite": "Филтрирайте по уебсайт",
|
4435 |
+
"FirstSiteInlineHelp": "Необходимо е да се даде на нов потребител роля за преглед на уебсайт при създаването. Ако не бъде предоставен достъп, потребителят ще види грешка при влизане. Можете да дадете повече разрешения, след като потребителят бъде създаден в раздела „Разрешения“, който ще се появи вляво.",
|
4436 |
+
"FirstWebsitePermission": "Разрешение за първи уебсайт",
|
4437 |
"ForAnonymousUsersReportDateToLoadByDefault": "За анонимни потребители, дата доклад да се зареди по подразбиране",
|
4438 |
+
"GiveAccessToAll": "Дайте на този потребител достъп до всички уебсайтове",
|
4439 |
+
"GiveUserAccess": "Дайте „%1$s“ %2$s достъп за %3$s.",
|
4440 |
+
"GiveViewAccess": "Дайте достъп за преглед за %1$s",
|
4441 |
+
"GiveViewAccessInstructions": "За да дадете достъп за преглед на съществуващ потребител за %s, въведете потребителското име или имейл адреса на съществуващ потребител",
|
4442 |
+
"GiveViewAccessTitle": "Дайте достъп на съществуващ потребител за преглед на отчети за %s",
|
4443 |
+
"GoBackSecurityPage": "Върнете се към страницата за сигурност.",
|
4444 |
+
"HasSuperUserAccess": "Има суперпотребителски достъп",
|
4445 |
+
"IfThisWasYouIgnoreIfNot": "Ако това сте били Вие, не се колебайте да игнорирате този имейл. Ако това не сте били Вие, моля, влезте, коригирайте имейл адреса си, променете паролата си и се свържете с администратор на Matomo.",
|
4446 |
+
"IfThisWasYouPasswordChange": "Ако това сте били Вие, не се колебайте да игнорирате този имейл. Ако това не сте били Вие, моля, свържете се незабавно с администратор на Matomo, тъй като акаунтът Ви може да е бил компрометиран!",
|
4447 |
+
"IfYouWouldLikeToChangeThePasswordTypeANewOne": "Ако искате да промените паролата, въведете нова. В противен случай оставете това празно.",
|
4448 |
+
"IncludedInUsersRole": "Включено в ролята на този потребител.",
|
4449 |
"InjectedHostCannotChangePwd": "В момента вие посещавате страница от неизвестен хост(%1$s). Не можете да смените паролата, преди да отстраните този проблем.",
|
4450 |
"LastSeen": "Последно видяно",
|
4451 |
+
"LastUsed": "Последно използван",
|
4452 |
+
"MainDescription": "Решете кои потребители имат достъп до Вашите уебсайтове. Можете също така да дадете достъп до всички уебсайтове наведнъж, като изберете „Прилагане към всички уебсайтове“ в селектора на уебсайтове.",
|
4453 |
"ManageAccess": "Управление на правата",
|
4454 |
+
"ManageUsers": "Управление на потребители",
|
4455 |
+
"ManageUsersAdminDesc": "Създайте нови потребители или актуализирайте съществуващите потребители. След това можете да зададете и техните разрешения тук. Моля, имайте предвид, че сте влезли като администратор. Това означава, че виждате и управлявате само потребители, които имат достъп до конкретните уебсайтове, за които имате „администраторски“ разрешения. Само потребител със супер потребителски достъп може да вижда и управлява всички потребители във всички уебсайтове.",
|
4456 |
+
"ManageUsersDesc": "Създайте нови потребители или актуализирайте съществуващите потребители. След това можете да зададете и техните разрешения тук.",
|
4457 |
"MenuAnonymousUserSettings": "Настройки на анонимните потребители",
|
4458 |
+
"MenuPersonal": "Лични",
|
4459 |
"MenuUserSettings": "Потребителски настройки",
|
4460 |
+
"MenuUsers": "Потребители",
|
4461 |
+
"NewsletterSignupFailureMessage": "Упс, нещо се обърка. Не успяхме да Ви запишем за бюлетина.",
|
4462 |
+
"NewsletterSignupMessage": "Абонирайте се за нашия бюлетин, за да получавате редовна информация за Matomo. Можете да се отпишете от него по всяко време. Тази услуга използва MadMimi. Научете повече за това на %1$sстраницата с политиката за поверителност на Matomo%2$s.",
|
4463 |
+
"NewsletterSignupSuccessMessage": "Супер, регистрирани сте! Ще се свържем скоро.",
|
4464 |
+
"NewsletterSignupTitle": "Абониране за бюлетин",
|
4465 |
+
"NoAccessWarning": "Този потребител не е получил достъп до уебсайт. Когато влязат, ще видят съобщение за грешка. За да предотвратите това, добавете достъп до уебсайт по-долу.",
|
4466 |
+
"NoTokenCreatedYetCreateNow": "Все още няма създаден токен, %1$sсъздайте нов токен сега%2$s.",
|
4467 |
"NoUsersExist": "Не са налични потребители, все още.",
|
4468 |
+
"NoteNoAnonymousUserAccessSettingsWontBeUsed2": "Бележка: Не можете да променяте настройките в тази секция, защото нямате никакви сайтове с разрешен достъп за анонимни потребители.",
|
4469 |
+
"OrManageIndividually": "Или управлявайте достъпа на този потребител до всеки уебсайт поотделно",
|
4470 |
+
"PasswordChangeNotificationSubject": "Паролата на Вашия акаунт в Matomo току-що е променена",
|
4471 |
+
"PasswordChangeTerminatesOtherSessions": "Когато промените паролата си, всяка друга активна сесия на този акаунт ще бъде прекъсната.",
|
4472 |
+
"PasswordChangedEmail": "Вашата парола току-що е променена. Промяната е инициирана от следното устройство: %1$s (IP адрес = %2$s).",
|
4473 |
+
"Permissions": "Разрешения",
|
4474 |
+
"PersonalSettings": "Лични настройки",
|
4475 |
+
"PleaseStoreToken": "Моля, съхранявайте токена си сигурно, тъй като няма да можете да осъществите достъп или да видите токена отново.",
|
4476 |
+
"PluginDescription": "Управлението на потребителите Ви позволява да добавяте нови потребители, да редактирате съществуващи потребители и да им давате достъп за преглед или администриране на уебсайтове.",
|
4477 |
"PrivAdmin": "Админ",
|
4478 |
+
"PrivAdminDescription": "Потребителите с тази роля могат да управляват уебсайт и да предоставят на други потребители достъп до уебсайта. Те също могат да правят всичко, което може да направи ролята %s.",
|
4479 |
"PrivNone": "Без права",
|
4480 |
"PrivView": "Преглед",
|
4481 |
+
"PrivViewDescription": "Потребител с тази роля може да преглежда всички отчети.",
|
4482 |
+
"PrivWrite": "Запис",
|
4483 |
+
"PrivWriteDescription": "Потребителите с тази роля могат да преглеждат цялото съдържание плюс да създават, управляват и изтриват обекти като цели, фунии, топлинни карти, записи на сесии и формуляри за този уебсайт.",
|
4484 |
+
"RemoveAllAccessToThisSite": "Премахнете целия достъп до този уебсайт",
|
4485 |
+
"RemovePermissions": "Премахване на разрешения",
|
4486 |
+
"RemoveSuperuserAccessConfirm": "Премахването на достъпа на супер потребител ще остави потребителя без разрешения (ще трябва да ги добавите след това). Въведете паролата си, за да продължите.",
|
4487 |
+
"RemoveUserAccess": "Премахнете достъпа за „%1$s“ за %2$s.",
|
4488 |
"ReportDateToLoadByDefault": "Отчет от дата да се зареди по подразбиране",
|
4489 |
"ReportToLoadByDefault": "Доклад за зареждане по подразбиране",
|
4490 |
+
"ResetTwoFactorAuthentication": "Нулиране на двуфакторната автентикация",
|
4491 |
+
"ResetTwoFactorAuthenticationInfo": "Ако потребителят вече не може да влезе поради загубени кодове за възстановяване или изгубено устройство за удостоверяване, можете да нулирате двуфакторната автентикация за потребителя, така че той да може да влезе отново.",
|
4492 |
+
"Role": "Роля",
|
4493 |
+
"RoleFor": "Роля за",
|
4494 |
+
"RolesHelp": "Ролите определят какво може да направи потребителят в Matomo по отношение на конкретен уебсайт. Научете повече за ролите %1$sView%2$s и %3$sAdmin%4$s.",
|
4495 |
+
"SaveBasicInfo": "Запазете основна информация",
|
4496 |
+
"SetPermission": "Задайте разрешение",
|
4497 |
+
"SuperUserAccess": "Достъп на супер потребител",
|
4498 |
"SuperUserAccessManagement": "Управление на достъпа на привилигированите потребители",
|
4499 |
"SuperUserAccessManagementGrantMore": "Тук могат да се предоставят права „привилигирован потребител“ на потребителите. Тази функция трябва да се използва внимателно.",
|
4500 |
+
"SuperUserAccessManagementMainDescription": "Супер потребителите имат най-високите права. Те могат да изпълняват всички административни задачи, като добавяне на нови уебсайтове за наблюдение, добавяне на потребители, промяна на потребителските разрешения, активиране и деактивиране на плъгини и дори инсталиране на нови плъгини от Marketplace.",
|
4501 |
+
"SuperUserIntro1": "Супер потребителите имат най-високите разрешения. Те могат да изпълняват всички административни задачи, като добавяне на нови уебсайтове за наблюдение, добавяне на потребители, промяна на потребителските разрешения, активиране и деактивиране на плъгини и дори инсталиране на нови плъгини от Marketplace. Можете да предоставите супер потребителски достъп на други потребители на Divezone тук.",
|
4502 |
+
"SuperUserIntro2": "Моля, използвайте тази функция внимателно.",
|
4503 |
+
"SuperUsersPermissionsNotice": "Супер потребителите имат администраторски достъп до всички уебсайтове, така че няма нужда да управлявате техните разрешения за всеки уебсайт.",
|
4504 |
+
"TheDisplayedUsersAreSelected": "Избрани са показаните потребители %1$s.",
|
4505 |
+
"TheDisplayedWebsitesAreSelected": "Избрани са показаните уебсайтове %1$s.",
|
4506 |
"TheLoginScreen": "В екрана за вход",
|
4507 |
"ThereAreCurrentlyNRegisteredUsers": "Има %s регистрирани потребители.",
|
4508 |
+
"TokenAuth": "Токен за удостоверяване на API",
|
4509 |
+
"TokenAuthIntro": "Генерираните от Вас токени могат да се използват за достъп до API за отчитане на Matomo, API за проследяване на Matomo и експортирани джаджи на Matomo и имат същите разрешения като Вашите обикновени потребителски входове. Можете да използвате тези токени и за мобилното приложение Matomo.",
|
4510 |
+
"TokenRegenerateConfirmSelf": "Промяната на токена за удостоверяване на API ще направи невалиден Вашия собствен токен. Ако текущият токен се използва, трябва да актуализирате всички API клиенти с новогенерирания токен. Наистина ли искате да промените токена си за удостоверяване?",
|
4511 |
+
"TokenRegenerateTitle": "Регенерирайте",
|
4512 |
+
"TokenSuccessfullyDeleted": "Токенът е изтрит успешно",
|
4513 |
+
"TokenSuccessfullyGenerated": "Токенът е генериран успешно",
|
4514 |
+
"TokensSuccessfullyDeleted": "Всички токени бяха успешно изтрити",
|
4515 |
+
"TokensWithExpireDateCreationBySystem": "Токени с дата на изтичане в момента могат да бъдат създадени само от системата",
|
4516 |
+
"TwoFactorAuthentication": "Двуфакторна автентикация",
|
4517 |
+
"TypeYourCurrentPassword": "Моля, въведете текущата си парола, за да потвърдите промяната на паролата.",
|
4518 |
"TypeYourPasswordAgain": "Вашата нова парола отново.",
|
4519 |
"User": "Потребител",
|
4520 |
+
"UserHasNoPermission": "%1$s в момента има %2$s до %3$s",
|
4521 |
+
"UserHasPermission": "%1$s в момента има %2$s достъп за %3$s.",
|
4522 |
+
"UserSearch": "Търсене на потребител",
|
4523 |
+
"Username": "Потребител",
|
4524 |
"UsersManagement": "Управление на потребители",
|
4525 |
"UsersManagementMainDescription": "Създайте нови потребители или управлявайте вече съществуващи. Също така и можете да задавате правата за достъп.",
|
4526 |
+
"UsesTwoFactorAuthentication": "Използва двуфакторна автентикация",
|
4527 |
+
"WhenUsersAreNotLoggedInAndVisitPiwikTheyShouldAccess": "Когато потребителите не са влезли и посещават Matomo, те първоначално трябва да видят",
|
4528 |
+
"YourCurrentPassword": "Вашата текуща парола",
|
4529 |
"YourUsernameCannotBeChanged": "Потребителското име не може да се променя.",
|
4530 |
"YourVisitsAreIgnoredOnDomain": "%1$sВашите посещения са игнорирани от Matomo в %2$s %3$s (Matomo игнорира бисквитката, намерена във Вашият браузър).",
|
4531 |
+
"YourVisitsAreNotIgnored": "%1$sВашите посещения не се игнорират от Matomo %2$s(Бисквитката за игнориране на Вашите посещения, не е открита във Вашият браузър)."
|
|
|
|
|
|
|
4532 |
},
|
4533 |
"VisitFrequency": {
|
4534 |
+
"ColumnActionsByNewVisits": "Действия от нови посещения",
|
4535 |
"ColumnActionsByReturningVisits": "Действия от Върнали се посетители",
|
4536 |
+
"ColumnAverageVisitDurationForNewVisitors": "Средна продължителност на ново посещение (в секунди)",
|
4537 |
"ColumnAverageVisitDurationForReturningVisitors": "Средно времетраене на посещението на върналите се посетители (в секунди)",
|
4538 |
+
"ColumnAvgActionsPerNewVisit": "Среден брой действия на ново посещение",
|
4539 |
"ColumnAvgActionsPerReturningVisit": "Средно действия на завърналия се посетител",
|
4540 |
+
"ColumnBounceCountForReturningVisits": "Брой повторни посещения",
|
4541 |
+
"ColumnBounceRateForNewVisits": "Степен на отпадане (напускане след първа страница) за нови посещения",
|
4542 |
"ColumnBounceRateForReturningVisits": "Bounce rate за върнали се посетители",
|
4543 |
+
"ColumnMaxActionsInReturningVisit": "Максимум действия при едно повторно посещение",
|
4544 |
"ColumnNbReturningVisitsConverted": "Брой конвертирани повторни посещения",
|
4545 |
+
"ColumnNewUsers": "Нови потребители",
|
4546 |
+
"ColumnNewVisits": "Нови посещения",
|
4547 |
+
"ColumnReturningUsers": "Връщащи се потребители",
|
4548 |
"ColumnReturningVisits": "Върнали се посетители",
|
4549 |
"ColumnSumVisitLengthReturning": "Време прекарано по време на повторните посещения (в секунди)",
|
4550 |
"ColumnUniqueNewVisitors": "Уникални нови посетители",
|
4551 |
"ColumnUniqueReturningVisitors": "Уникални повторни посетители",
|
4552 |
+
"NewActions": "действия от новите посещения",
|
4553 |
+
"NewAverageVisitDuration": "средна продължителност на посещението за нови посетители",
|
4554 |
+
"NewAvgActions": "действия на ново посещение",
|
4555 |
+
"NewBounceRate": "новите посещения са отпаднали (напуснали уебсайта след една страница)",
|
4556 |
"NewVisits": "нови посещения",
|
4557 |
+
"PluginDescription": "Отчита показатели за Вашите нови и завърнали се посетители.",
|
4558 |
+
"ReturnActions": "действия от завръщащите се посещения",
|
4559 |
+
"ReturnAverageVisitDuration": "средна продължителност на посещението за завръщащи се посетители",
|
4560 |
+
"ReturnAvgActions": "действия на повторно посещение",
|
4561 |
+
"ReturnBounceRate": "повторните посещения са отпаднали (напуснали са уебсайта след една страница)",
|
4562 |
+
"ReturnVisits": "завърнали се посетители",
|
4563 |
"ReturningVisitDocumentation": "Повторно посещение (за разлиса от ново посещение) се прави от някой, който е посещавал сайта поне веднъж в миналото.",
|
4564 |
"ReturningVisitsDocumentation": "Това е преглед на повторните посещения.",
|
|
|
4565 |
"SubmenuFrequency": "Честота",
|
4566 |
+
"VisitFrequencyReportDocumentation": "Този отчет показва общи показатели, като посещения за завърнали се посетители, заедно със същите показатели за нови посетители. Научете как се представят като цяло завърналите се посетители в сравнение с новите посетители.",
|
4567 |
"WidgetGraphReturning": "Графика на завърналите се посетители",
|
4568 |
"WidgetOverview": "Резюме на честотата"
|
4569 |
},
|
4570 |
"VisitTime": {
|
4571 |
+
"ColumnLocalHour": "Местно време - час (Начало на посещението)",
|
4572 |
+
"ColumnLocalMinute": "Местно време - минута (Начало на посещението)",
|
4573 |
"ColumnLocalTime": "Локално време (на посетителя)",
|
4574 |
+
"ColumnServerHour": "Време на сървъра - час",
|
4575 |
+
"ColumnServerMinute": "Време на сървъра - минута",
|
4576 |
"ColumnServerTime": "Сървърно време (на сървъра)",
|
4577 |
+
"ColumnSiteHour": "Време на сайта - час",
|
4578 |
+
"ColumnUTCMinute": "Час в UTC - минути",
|
4579 |
+
"ColumnVisitEndServerDate": "Време на сървъра - дата (Час на последно действие)",
|
4580 |
+
"ColumnVisitEndServerDayOfMonth": "Време на сървъра - ден от месеца (Час на последно действие)",
|
4581 |
+
"ColumnVisitEndServerDayOfWeek": "Време на сървъра - ден от седмицата (Час на последно действие)",
|
4582 |
+
"ColumnVisitEndServerDayOfYear": "Време на сървъра - ден от годината (Час на последно действие)",
|
4583 |
+
"ColumnVisitEndServerHour": "Време на сървъра - час (Време на последно действие)",
|
4584 |
+
"ColumnVisitEndServerMinute": "Време на сървъра - минута (Време на последно действие)",
|
4585 |
+
"ColumnVisitEndServerMonth": "Време на сървъра - месец (Време на последно действие)",
|
4586 |
+
"ColumnVisitEndServerQuarter": "Време на сървъра - тримесечие (Време на последно действие)",
|
4587 |
+
"ColumnVisitEndServerSecond": "Време на сървъра - секунда (Време на последно действие)",
|
4588 |
+
"ColumnVisitEndServerWeekOfYear": "Време на сървъра - седмица от годината (Час на последно действие)",
|
4589 |
+
"ColumnVisitEndServerYear": "Време на сървъра - година (Час на последно действие)",
|
4590 |
+
"ColumnVisitEndSiteHour": "Време на сайта - час (Време на последно действие)",
|
4591 |
+
"ColumnVisitEndUTCDate": "Час в UTC - дата (Час на последното действие)",
|
4592 |
+
"ColumnVisitEndUTCDayOfMonth": "Час в UTC - ден от месеца (Час на последно действие)",
|
4593 |
+
"ColumnVisitEndUTCDayOfWeek": "Час в UTC - ден от седмицата (Час на последно действие)",
|
4594 |
+
"ColumnVisitEndUTCDayOfYear": "Час в UTC - ден от годината (Час на последно действие)",
|
4595 |
+
"ColumnVisitEndUTCMinute": "Час в UTC - минута (време на последно действие)",
|
4596 |
+
"ColumnVisitEndUTCMonth": "Час в UTC - месец (Час на последно действие)",
|
4597 |
+
"ColumnVisitEndUTCQuarter": "Час в UTC - тримесечие (Време на последно действие)",
|
4598 |
+
"ColumnVisitEndUTCSecond": "Време в UTC - секунда (Време на последно действие)",
|
4599 |
+
"ColumnVisitEndUTCWeekOfYear": "Час в UTC - седмица от годината (Час на последно действие)",
|
4600 |
+
"ColumnVisitEndUTCYear": "Час в UTC - година (Час на последно действие)",
|
4601 |
+
"ColumnVisitStartServerHour": "Време на сървъра - час (Начало на посещението)",
|
4602 |
+
"ColumnVisitStartServerMinute": "Време на сървъра - минути (Начало на посещението)",
|
4603 |
+
"ColumnVisitStartSiteHour": "Време на сайта - час (Начало на посещението)",
|
4604 |
+
"ColumnVisitStartUTCMinute": "Час в UTC - минути (Начало на посещението)",
|
4605 |
"DayOfWeek": "Ден от седмицата",
|
4606 |
"LocalTime": "Посещения по локално време",
|
4607 |
"NHour": "%sч",
|
4608 |
+
"PluginDescription": "Отчита местното време и времето на сървъра, когато посетителите Ви разглеждат уебсайта или приложението Ви.",
|
4609 |
"ServerTime": "Посещения по сървърно време",
|
4610 |
+
"SiteTime": "Посещения на час в часовата зона на сайта",
|
4611 |
"SubmenuTimes": "Време",
|
4612 |
+
"TimesSubcategoryHelp": "Разделът Times Ви показва кога хората посещават Вашия сайт. Можете да видите най-популярните часове в местно време, в които Вашите потребители посещават, за да можете да разберете къде се вписва Вашият сайт в живота им. Освен това показва най-популярните времена на сървъра, което може да разкрие изискванията към Вашия технологичен стек.",
|
4613 |
"VisitsByDayOfWeek": "Посещения по ден от седмицата",
|
4614 |
"WidgetByDayOfWeekDocumentation": "Графиката показва посещенията за всеки ден от седмицата.",
|
4615 |
"WidgetLocalTime": "Посещения по локално време",
|
4616 |
"WidgetLocalTimeDocumentation": "Тази графика показва колко е бил часът в %1$s часовия пояс на потребителите %2$s по време на посещенията им.",
|
4617 |
"WidgetServerTime": "Посещения по сървърно време",
|
4618 |
+
"WidgetServerTimeDocumentation": "Тази графика показва колко е бил часът в %1$s часовия пояс използван от сървъра %2$s по време на посещенията.",
|
4619 |
+
"WidgetSiteTimeDocumentation": "Тази графика показва колко е било в часовата зона на сайта %1$s %2$s по време на посещенията."
|
4620 |
},
|
4621 |
"VisitorInterest": {
|
4622 |
"BetweenXYMinutes": "%1$s-%2$s мин",
|
4641 |
"WidgetVisitsByNumDocumentation": "В този отчет можете да видите броя посещения, които са били N-тото посещение, тоест посетителите, които са посетили вашият уеб сайт поне N пъти."
|
4642 |
},
|
4643 |
"VisitsSummary": {
|
4644 |
+
"AverageGenerationTime": "средно време за генериране",
|
4645 |
+
"AverageVisitDuration": "средна продължителност на посещението",
|
4646 |
"GenerateQueries": "%s заявки са изпълнени",
|
4647 |
"GenerateTime": "%s секунди за генериране на страницата",
|
4648 |
+
"MaxNbActions": "максимален брой действия при едно посещение",
|
4649 |
"NbActionsDescription": "%s действия (показвания, изтегляния и outlinks)",
|
4650 |
+
"NbActionsPerVisit": "действия (преглеждания на страници, изтегляния, препратки и вътрешни търсения в сайта) на посещение",
|
4651 |
+
"NbDownloadsDescription": "изтегляния",
|
4652 |
"NbKeywordsDescription": "уникални ключови думи",
|
4653 |
+
"NbOutlinksDescription": "препратки",
|
4654 |
+
"NbPageviewsDescription": "показвания на страници",
|
4655 |
+
"NbSearchesDescription": "общо търсения във Вашия уебсайт",
|
4656 |
+
"NbUniqueDownloadsDescription": "уникални изтегляния",
|
4657 |
+
"NbUniqueOutlinksDescription": "уникални външни препратки",
|
4658 |
+
"NbUniquePageviewsDescription": "уникални показвания на страници",
|
4659 |
"NbUniqueVisitors": "уникални посетители",
|
4660 |
+
"NbUsersDescription": "потребители",
|
4661 |
+
"NbVisitsBounced": "посещенията са отскочили (напуснали уебсайта след една страница)",
|
4662 |
"NbVisitsDescription": "посещения",
|
4663 |
+
"PluginDescription": "Отчита общи аналитични показатели: посещения, уникални посетители, брой действия, степен на напускане на сайта след първа страница и др.",
|
4664 |
"VisitsSummary": "Резюме на посещенията",
|
4665 |
"VisitsSummaryDocumentation": "Това е преглед на еволюцията на посещенията.",
|
4666 |
+
"VisitsSummaryReportDocumentation": "Този отчет предоставя много общ преглед на това как се държат Вашите посетители.",
|
4667 |
+
"WidgetLastVisits": "Посещения във времето",
|
4668 |
"WidgetOverviewGraph": "Резюме с графика",
|
4669 |
"WidgetVisits": "Резюме на посещенията"
|
4670 |
},
|
4671 |
"WebsiteMeasurable": {
|
4672 |
"Website": "Сайт",
|
4673 |
+
"WebsiteDescription": "Уебсайтът се състои от уеб страници, които обикновено се обслужват от един уеб домейн.",
|
4674 |
"Websites": "Сайтове"
|
4675 |
},
|
4676 |
"Widgetize": {
|
4677 |
"OpenInNewWindow": "Отвори в нов прозорец",
|
4678 |
+
"PluginDescription": "Показвайте всеки отчет Matomo във Вашия уебсайт или приложение с обикновен HTML таг за „вграждане“ (embed).",
|
4679 |
+
"TooHighAccessLevel": "Този потребител има достъп на супер потребител. Вграждането на уиджети с удостоверяване на токен на супер потребител не е разрешено. %1$sПроверете ЧЗВ за повече информация.%2$s",
|
4680 |
+
"TopLinkTooltip": "Експортирайте отчетите на Matomo като уиджети и вградете таблото за управление във Вашето приложение като вграден iFrame.",
|
4681 |
+
"ViewAccessRequired": "Този потребител има поне някакъв достъп за запис. Могат да се използват само токени на потребители, които имат достъп само за преглед. Проверете %1$s за повече информация."
|
4682 |
}
|
4683 |
}
|
app/lang/bn.json
CHANGED
@@ -1209,6 +1209,7 @@
|
|
1209 |
"Timezone_Pacific_Gambier": "গাম্বিয়ের",
|
1210 |
"Timezone_Pacific_Honolulu": "হনোলুলু",
|
1211 |
"Timezone_Pacific_Johnston": "জনস্টন",
|
|
|
1212 |
"Timezone_Pacific_Kiritimati": "কিরিতিমাতি",
|
1213 |
"Timezone_Pacific_Kosrae": "কোসরায়",
|
1214 |
"Timezone_Pacific_Kwajalein": "কোয়াজালেইন",
|
1209 |
"Timezone_Pacific_Gambier": "গাম্বিয়ের",
|
1210 |
"Timezone_Pacific_Honolulu": "হনোলুলু",
|
1211 |
"Timezone_Pacific_Johnston": "জনস্টন",
|
1212 |
+
"Timezone_Pacific_Kanton": "Kanton",
|
1213 |
"Timezone_Pacific_Kiritimati": "কিরিতিমাতি",
|
1214 |
"Timezone_Pacific_Kosrae": "কোসরায়",
|
1215 |
"Timezone_Pacific_Kwajalein": "কোয়াজালেইন",
|
app/lang/bs.json
CHANGED
@@ -304,7 +304,6 @@
|
|
304 |
"YourChangesHaveBeenSaved": "Vaše promjene su sačuvane."
|
305 |
},
|
306 |
"API": {
|
307 |
-
"GenerateVisits": "Ako nemate podataka za danas onda možete prvo generisati neke podatke sa dodatkom %1$s. Ovo možete uraditi ako uključite dodatak %2$s i zatim kliknete na 'Proizvođač posjetilaca' u meniju koja se nalazi u Matomo adminskom prostoru.",
|
308 |
"KeepTokenSecret": "Ovaj token_auth je povjerljiv podatak poput vašeg korisničkog imena i lozine. %1$s Nemojte ga dijeliti sa drugima%2$s!",
|
309 |
"LoadedAPIs": "Uspješno učitani %s API(-ovi)"
|
310 |
},
|
@@ -1542,6 +1541,7 @@
|
|
1542 |
"Timezone_Pacific_Gambier": "Gambier",
|
1543 |
"Timezone_Pacific_Honolulu": "Honolulu",
|
1544 |
"Timezone_Pacific_Johnston": "Johnston",
|
|
|
1545 |
"Timezone_Pacific_Kiritimati": "Kiritimati",
|
1546 |
"Timezone_Pacific_Kosrae": "Kosrae",
|
1547 |
"Timezone_Pacific_Kwajalein": "Kwajalein",
|
304 |
"YourChangesHaveBeenSaved": "Vaše promjene su sačuvane."
|
305 |
},
|
306 |
"API": {
|
|
|
307 |
"KeepTokenSecret": "Ovaj token_auth je povjerljiv podatak poput vašeg korisničkog imena i lozine. %1$s Nemojte ga dijeliti sa drugima%2$s!",
|
308 |
"LoadedAPIs": "Uspješno učitani %s API(-ovi)"
|
309 |
},
|
1541 |
"Timezone_Pacific_Gambier": "Gambier",
|
1542 |
"Timezone_Pacific_Honolulu": "Honolulu",
|
1543 |
"Timezone_Pacific_Johnston": "Johnston",
|
1544 |
+
"Timezone_Pacific_Kanton": "Kanton",
|
1545 |
"Timezone_Pacific_Kiritimati": "Kiritimati",
|
1546 |
"Timezone_Pacific_Kosrae": "Kosrae",
|
1547 |
"Timezone_Pacific_Kwajalein": "Kwajalein",
|
app/lang/ca.json
CHANGED
@@ -7,94 +7,138 @@
|
|
7 |
"AboutPiwikX": "Sobre Matomo %s",
|
8 |
"Action": "Acció",
|
9 |
"Actions": "Accions",
|
10 |
-
"Add": "
|
11 |
"AfterEntry": "després d'entrar aquí",
|
12 |
"All": "Tots",
|
13 |
"AllWebsitesDashboard": "Tauler de tots els llocs web",
|
14 |
"AllowPiwikArchivingToTriggerBrowser": "Permetre que l'arxivat del Matomo es dispari quan els informes es veuen des del navegador",
|
15 |
"And": "i",
|
16 |
"Apply": "Aplica",
|
17 |
-
"ArchivingInlineHelp": "Per llocs amb
|
18 |
-
"ArchivingTriggerDescription": "Recomanat per instal·lacions grans de Matomo, es pot %1$sconfigurar una %2$
|
|
|
19 |
"AuthenticationMethodSmtp": "Mètode d'autenticació SMTP",
|
20 |
"AverageOrderValue": "Valor mig de les comandes",
|
21 |
"AveragePrice": "Preu mig",
|
22 |
-
"AverageQuantity": "
|
|
|
23 |
"BackToPiwik": "Torna al Matomo",
|
24 |
"Broken": "Trencat",
|
25 |
"BrokenDownReportDocumentation": "Està separada en diferents informes, que es mostren amb línies de punts al peu de la pàgina. Podeu augmentar aquests gràfics clicant en l'informe que voleu veure.",
|
26 |
-
"Cancel": "Cancel·
|
27 |
"CannotUnzipFile": "No es pot descomprimir el fitxer %1$s: %2$s",
|
|
|
28 |
"ChangePassword": "Canvia la contrasenya",
|
29 |
-
"ChangeTagCloudView": "
|
30 |
"ChooseDate": "Seleccioneu una data, la data seleccionada actualment es: %s",
|
31 |
"ChooseLanguage": "Tria idioma",
|
32 |
"ChoosePeriod": "Triar període",
|
33 |
"Clear": "Neteja",
|
34 |
-
"ClickHere": "
|
35 |
-
"
|
|
|
36 |
"Close": "Tanca",
|
37 |
"ColumnActionsPerVisit": "Accions per visita",
|
38 |
-
"ColumnActionsPerVisitDocumentation": "El
|
39 |
-
"
|
|
|
|
|
40 |
"ColumnAverageTimeOnPageDocumentation": "La mitjana de temps que els visitants s'han passat en aquesta pàgina (només la pàgina no el lloc enter).",
|
41 |
"ColumnAvgTimeOnSite": "Temps mitjà per visita",
|
42 |
-
"ColumnAvgTimeOnSiteDocumentation": "La durada
|
43 |
-
"ColumnBounceRate": "
|
44 |
"ColumnBounceRateDocumentation": "El percentatge de visites que només han vist una pàgina. Això significa, que el visitant ha marxat del lloc web directament per la pàgina d'entrada.",
|
45 |
"ColumnBounces": "Rebots",
|
46 |
-
"ColumnBouncesDocumentation": "El
|
47 |
"ColumnConversionRate": "Tarifa de conversió",
|
48 |
"ColumnConversionRateDocumentation": "El percentatge de visites que han disparat una conversió d'objectiu.",
|
49 |
"ColumnDestinationPage": "Pàgina destí",
|
50 |
"ColumnEntrances": "Entrades",
|
51 |
-
"ColumnEntrancesDocumentation": "
|
52 |
"ColumnExitRate": "Taxa de sortida",
|
53 |
"ColumnExitRateDocumentation": "El percentatge de visites que han deixat el lloc web després de veure aquesta pàgina.",
|
54 |
"ColumnExits": "Sortides",
|
55 |
-
"ColumnExitsDocumentation": "
|
56 |
"ColumnGenerationTime": "Temps de generació",
|
|
|
57 |
"ColumnKeyword": "Paraula clau",
|
58 |
"ColumnLabel": "Etiqueta",
|
59 |
"ColumnMaxActions": "Accions màximes en una visita",
|
60 |
"ColumnNbActions": "Accions",
|
61 |
-
"ColumnNbActionsDocumentation": "El
|
62 |
"ColumnNbUniqVisitors": "Visitants únics",
|
|
|
63 |
"ColumnNbUsers": "Usuaris",
|
|
|
64 |
"ColumnNbVisits": "Visites",
|
|
|
65 |
"ColumnPageBounceRateDocumentation": "El percentatge de visites que han començat en aquesta pàgina i han deixat el lloc web directament.",
|
|
|
66 |
"ColumnPageviews": "Visualitzacions de pàgina",
|
67 |
-
"ColumnPageviewsDocumentation": "El
|
|
|
68 |
"ColumnRevenue": "Ingressos",
|
|
|
69 |
"ColumnSumVisitLength": "Temps total acumulat pels visitants (en segons)",
|
70 |
"ColumnTotalPageviews": "Total de pàgines vistes",
|
71 |
"ColumnUniqueEntrances": "Entrades úniques",
|
72 |
"ColumnUniqueExits": "Sortides úniques",
|
73 |
"ColumnUniquePageviews": "Visualitzacions de pàgina úniques",
|
74 |
-
"ColumnUniquePageviewsDocumentation": "El
|
75 |
"ColumnValuePerVisit": "Valor per visita",
|
76 |
"ColumnViewedAfterSearch": "Clicat als resultats de cerca",
|
77 |
-
"ColumnViewedAfterSearchDocumentation": "El nombre de vegades que aquesta pàgina s'ha visitat
|
|
|
78 |
"ColumnVisitDuration": "Durada de la visita (en segons)",
|
79 |
"ColumnVisitsWithConversions": "Visites amb conversions",
|
80 |
-
"
|
81 |
-
"
|
82 |
-
"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
83 |
"CreatedByUser": "Creat per %s",
|
|
|
84 |
"CurrentMonth": "Mes actual",
|
85 |
"CurrentWeek": "Setmana actual",
|
86 |
"CurrentYear": "Any actual",
|
87 |
-
"
|
|
|
|
|
88 |
"DailyReport": "diari",
|
89 |
"DailyReports": "Informe diari",
|
90 |
-
"DailySum": "suma
|
91 |
-
"DashboardForASpecificWebsite": "Tauler per un lloc web concret",
|
92 |
-
"DataForThisGraphHasBeenPurged": "Les dades per aquest gràfic tenen més de %s mesos d'antiguitat i s'han purgat",
|
93 |
"DataForThisTagCloudHasBeenPurged": "Les dades per aquest nuvol d'etiquetes tenen més de %s mesos i s'han purgat.",
|
94 |
"Date": "Data",
|
95 |
"DateRange": "Rang de dates:",
|
96 |
"DateRangeFrom": "De",
|
97 |
"DateRangeFromTo": "De %1$s fins a %2$s",
|
|
|
98 |
"DateRangeTo": "Fins",
|
99 |
"DaysHours": "%1$s dies %2$s hores",
|
100 |
"DaysSinceFirstVisit": "Dies des de la primera visita",
|
@@ -106,6 +150,7 @@
|
|
106 |
"Description": "Descripció",
|
107 |
"Desktop": "Escriptori",
|
108 |
"Details": "Detalls",
|
|
|
109 |
"Discount": "Descompte",
|
110 |
"DisplaySimpleTable": "Mostrar una taula simple",
|
111 |
"DisplayTableWithGoalMetrics": "Mostrar una taula amb paràmetres globals",
|
@@ -113,9 +158,10 @@
|
|
113 |
"Documentation": "Documentació",
|
114 |
"Donate": "Donar",
|
115 |
"Done": "Fet",
|
|
|
116 |
"Download": "Descàrrega",
|
117 |
-
"DownloadFail_FileExists": "El fitxer %s ja existeix
|
118 |
-
"DownloadFail_FileExistsContinue": "Provant de continuar la descàrrega de %s, però ja existeix un fitxer completament descarregat
|
119 |
"DownloadFail_HttpRequestFail": "No s'ha pogut descarregar el fitxer! Alguna cosa no ha anat bé amb el lloc web d'on esteu descarregant. Podeu provar-ho més tard o obtenir el fitxer per vosaltres mateixos.",
|
120 |
"DownloadFullVersion": "%1$sDescarrega%2$s la versió completa! Ves a %3$s",
|
121 |
"DownloadPleaseRemoveExisting": "Si voleu que es sobreescrigui, elimineu el fitxer existent.",
|
@@ -126,18 +172,34 @@
|
|
126 |
"Edit": "Edita",
|
127 |
"EncryptedSmtpTransport": "Entreu el xifrat de la capa de transport requerit per el vostre servidor SMTP.",
|
128 |
"Error": "Error",
|
|
|
|
|
|
|
129 |
"Errors": "Errors",
|
130 |
"EvolutionOverPeriod": "Evolució del període",
|
|
|
|
|
|
|
|
|
131 |
"ExceptionConfigurationFileNotFound": "El fitxer de configuració {%s} no s'ha trobat.",
|
132 |
-
"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
133 |
"ExceptionFileIntegrity": "Ha fallat la verificació de integritat: %s",
|
|
|
134 |
"ExceptionFilesizeMismatch": "Mida de fitxer incohoerent: %1$s (mida esperada: %2$s, real: %3$s)",
|
135 |
"ExceptionIncompatibleClientServerVersions": "El vostre client %1$s té la versió %2$s que és incompatbile amb la versió de servidor %3$s.",
|
136 |
"ExceptionInvalidAggregateReportsFormat": "El format de informes agregats '%1$s' no és vàlid. Proveu-ne algun dels següents en el seu lloc: %2$s.",
|
137 |
-
"ExceptionInvalidArchiveTimeToLive": "El temps límit per fer l'arxivat avui ha de ser més gran que zero
|
|
|
138 |
"ExceptionInvalidDateFormat": "El format de data ha de ser: %1$s o una altra paraula clau suportada per la funció %2$s (vegeu %3$s per més informació)",
|
139 |
"ExceptionInvalidDateRange": "La data '%1$s' no és un rang correcte de data. Hauria de tenir el format següent: %2$s.",
|
140 |
-
"ExceptionInvalidPeriod": "El període '%1$s' no està suportat. Proveu-ne algun dels següents en el seu lloc: %2$s
|
141 |
"ExceptionInvalidRendererFormat": "El format generador '%1$s' no és vàlid. Proveu-ne un dels següents en el seu lloc: %2$s.",
|
142 |
"ExceptionInvalidReportRendererFormat": "El format de l'informe '%1$s' no és vàlid. Proveu-ne un dels següent en el seu lloc: %2$s.",
|
143 |
"ExceptionInvalidStaticGraphType": "El gràfic estàtic tipus '%1$s' no és vàlid. Proveu-ne un dels següents en el seu lloc: %2$s.",
|
@@ -146,40 +208,69 @@
|
|
146 |
"ExceptionMethodNotFound": "El mètode '%1$s' no existeix o no està disponible en el mòdul '%2$s'.",
|
147 |
"ExceptionMissingFile": "Falta fitxer: %s",
|
148 |
"ExceptionNonceMismatch": "No s'ha pogut verificar el token del formulari.",
|
149 |
-
"
|
|
|
|
|
|
|
|
|
|
|
150 |
"ExceptionReportNotFound": "El informe que s'ha seleccionat no existeix.",
|
151 |
"ExceptionUnableToStartSession": "No s'ha pogut començar la sessió.",
|
152 |
"ExceptionUndeletableFile": "No s'ha pogut esborrar %s",
|
|
|
|
|
|
|
|
|
153 |
"ExceptionUnreadableFileDisabledMethod": "El fitxer de configuració {%1$s} no s'ha pogut llegir. El vostre host pot tenir deshabilitat %2$s.",
|
|
|
|
|
|
|
154 |
"Export": "Exporta",
|
155 |
"ExportAsImage": "Exportar com a imatge",
|
156 |
"ExportThisReport": "Guardar aquestes dades en altres formats",
|
157 |
"Faq": "PMF",
|
|
|
|
|
|
|
158 |
"First": "Primer",
|
|
|
159 |
"ForExampleShort": "p.ex.",
|
|
|
|
|
160 |
"Forums": "Fòrums",
|
161 |
"FromReferrer": "de",
|
162 |
"GeneralInformation": "Informació General",
|
163 |
"GeneralSettings": "Configuració general",
|
|
|
164 |
"GetStarted": "Comenceu",
|
165 |
-
"GiveUsYourFeedback": "
|
166 |
"GoTo": "Anar a %s",
|
|
|
167 |
"Goal": "Objectiu",
|
168 |
"GraphHelp": "Més informació sobre mostrar gràfiques al Matomo.",
|
169 |
"HelloUser": "Hola, %s!",
|
170 |
"Help": "Ajuda",
|
|
|
|
|
|
|
171 |
"Hide": "amaga",
|
172 |
"HoursMinutes": "%1$s hores %2$s min",
|
173 |
"IP": "IP",
|
174 |
"Id": "Id",
|
|
|
|
|
175 |
"InfoFor": "Informació per %s",
|
176 |
"Installed": "Instal·lat",
|
177 |
"InvalidDateRange": "Interval de dates no vàlid, si us plau proveu-ho de nou",
|
178 |
"InvalidResponse": "Les dades rebudes són invàlides.",
|
179 |
"JsTrackingTag": "Etiqueta de seguiment JavaScript",
|
|
|
180 |
"Language": "Idioma",
|
|
|
181 |
"LastDays": "Últims %s dies (incloent avui)",
|
182 |
"LastDaysShort": "Últims %s dies",
|
|
|
|
|
183 |
"Loading": "Carregant…",
|
184 |
"LoadingData": "Les dades s'estan carregant…",
|
185 |
"LoadingPopover": "Carregant %s...",
|
@@ -187,7 +278,14 @@
|
|
187 |
"Locale": "ca_ES.UTF-8",
|
188 |
"Logout": "Surt",
|
189 |
"MainMetrics": "Mètriques principals",
|
190 |
-
"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
191 |
"Metadata": "Metadata",
|
192 |
"Metric": "Mètrica",
|
193 |
"MetricToPlot": "Mètrica a mostrar",
|
@@ -206,10 +304,13 @@
|
|
206 |
"NUsers": "%s usuaris",
|
207 |
"NVisits": "%s visites",
|
208 |
"Name": "Nom",
|
|
|
209 |
"NbActions": "Número d'accions",
|
|
|
210 |
"NbSearches": "Nombre de cerques internes",
|
211 |
"NeedMoreHelp": "Necessiteu més ajuda?",
|
212 |
"Never": "Mai",
|
|
|
213 |
"NewReportsWillBeProcessedByCron": "Quan l'arxivat del Matomo no es dispara per el navegador, els nous informes es processaran per el crontab.",
|
214 |
"NewUpdatePiwikX": "Nova actualització: Matomo %s",
|
215 |
"NewVisitor": "Nova visita",
|
@@ -220,6 +321,7 @@
|
|
220 |
"NoDataForTagCloud": "No hi ha dades...",
|
221 |
"NotDefined": "%s sense definir",
|
222 |
"NotInstalled": "No instal·lat",
|
|
|
223 |
"NotRecommended": "no recomanat",
|
224 |
"NotValid": "%s no és vàlid",
|
225 |
"Note": "Nota",
|
@@ -238,11 +340,14 @@
|
|
238 |
"OperationEndsWith": "Acaba amb",
|
239 |
"OperationEquals": "Es igual",
|
240 |
"OperationGreaterThan": "Major que",
|
|
|
|
|
241 |
"OperationLessThan": "Menor que",
|
242 |
"OperationNotEquals": "Diferent",
|
243 |
"OperationStartsWith": "Comença amb",
|
244 |
"OptionalSmtpPort": "Opcional. Per defecte té el valor 25 per no xifrat i TLS SMTP, i 465 per SSL SMTP.",
|
245 |
"Options": "Opcions",
|
|
|
246 |
"OrCancel": "o %1$s cancel·la %2$s",
|
247 |
"Others": "Altres",
|
248 |
"Outlink": "Enllaç extern",
|
@@ -251,26 +356,40 @@
|
|
251 |
"OverlayRowActionTooltipTitle": "Obre una pàgina superposada",
|
252 |
"Overview": "Resum",
|
253 |
"Pages": "Pàgines",
|
254 |
-
"
|
|
|
|
|
255 |
"Password": "Contrasenya",
|
256 |
"Period": "Període",
|
257 |
"Piechart": "Gràfic de sectors",
|
258 |
-
"
|
|
|
|
|
259 |
"PleaseContactYourPiwikAdministrator": "Si us plau, contacteu amb el vostre administrador del Matomo.",
|
260 |
-
"PleaseSpecifyValue": "Si us plau especifiqueu el valor per '%s'",
|
|
|
261 |
"PleaseUpdatePiwik": "Si us plau actualitzeu el Matomo",
|
|
|
262 |
"Plugin": "Connector",
|
263 |
"Plugins": "Connectors",
|
264 |
"PoweredBy": "Funcionant amb",
|
265 |
"Previous": "Anterior",
|
266 |
"PreviousDays": "%s dies anteriors (sense incloure avui)",
|
267 |
"PreviousDaysShort": "Anteriors %s dies",
|
|
|
|
|
268 |
"Price": "Preu",
|
|
|
269 |
"ProductConversionRate": "Taxa de conversió del producte",
|
270 |
"ProductRevenue": "Ingressos de productes",
|
|
|
271 |
"PurchasedProducts": "Productes comprats",
|
272 |
"Quantity": "Quantitat",
|
273 |
"RangeReports": "Rang de data personalitzat",
|
|
|
|
|
|
|
|
|
274 |
"Recommended": "Recomanat",
|
275 |
"RecordsToPlot": "Entrades a mostrar",
|
276 |
"Refresh": "Actualitza",
|
@@ -280,10 +399,13 @@
|
|
280 |
"Remove": "Elimina",
|
281 |
"Report": "Informe",
|
282 |
"ReportGeneratedFrom": "Aquest informe s'ha generat fent servir dades de %s.",
|
|
|
283 |
"Reports": "Informes",
|
|
|
284 |
"ReportsWillBeProcessedAtMostEveryHour": "El informes per tant es processaran com a molt cada hora.",
|
285 |
"RequestTimedOut": "Una petició a %s ha caducat. Proveu-ho de nou.",
|
286 |
"Required": "%s requerit",
|
|
|
287 |
"ReturningVisitor": "Visita que retorna",
|
288 |
"ReturningVisitorAllVisits": "Veure totes les visites",
|
289 |
"RowEvolutionRowActionTooltip": "Observeu com les mètriques d'aquesta fila han canviat durant el pas del temps",
|
@@ -294,29 +416,47 @@
|
|
294 |
"SaveImageOnYourComputer": "Per guardar la imatge al vostre ordinador, feu click amb el botó dret sobre la imatge i trieu \"Guardar la imatge com..\"",
|
295 |
"Search": "Cerca",
|
296 |
"SearchNoResults": "Sense resultats",
|
|
|
|
|
|
|
297 |
"Security": "Seguretat",
|
298 |
"SeeAll": "veure-ho tot",
|
299 |
"SeeTheOfficialDocumentationForMoreInformation": "Vegeu la %1$sinformació oficial%2$s per més informació.",
|
|
|
300 |
"Segment": "Segment",
|
301 |
-
"SelectYesIfYouWantToSendEmailsViaServer": "Trieu \"
|
302 |
"Settings": "Tauler de control",
|
303 |
"Shipping": "Enviament",
|
304 |
"Show": "mostra",
|
305 |
"SingleWebsitesDashboard": "Tauler per un sol lloc web",
|
306 |
"SmallTrafficYouCanLeaveDefault": "Per llocs amb poc transit, pots deixar el valor per defecte de %s segons i accedir als informes en temps real.",
|
307 |
"SmtpEncryption": "encriptació SMTP",
|
|
|
|
|
|
|
308 |
"SmtpPassword": "contrasenya SMTP",
|
309 |
"SmtpPort": "Port SMTP",
|
310 |
"SmtpServerAddress": "adreça del servidor SMTP",
|
311 |
"SmtpUsername": "usuari SMTP",
|
|
|
|
|
312 |
"Subtotal": "Subtotal",
|
313 |
"Summary": "Resum",
|
314 |
"Table": "Taula",
|
315 |
"TagCloud": "Núvol d'etiquetes",
|
316 |
"Tax": "Impostos",
|
|
|
|
|
|
|
|
|
317 |
"TimeOnPage": "Temps a la pàgina",
|
|
|
|
|
318 |
"Total": "Total",
|
|
|
319 |
"TotalRevenue": "Total Ingressos",
|
|
|
|
|
320 |
"TrackingScopeAction": "Acció",
|
321 |
"TrackingScopePage": "Pàgina",
|
322 |
"TrackingScopeVisit": "Visita",
|
@@ -325,31 +465,58 @@
|
|
325 |
"TranslatorName": "Isaac Sánchez Barrera, Joan Juvanteny",
|
326 |
"UniquePurchases": "Compres úniques",
|
327 |
"Unknown": "Desconegut",
|
|
|
328 |
"Upload": "Càrrega",
|
329 |
"UsePlusMinusIconsDocumentation": "Fes servir les icones de més i menys a l'esquerra per navegar.",
|
330 |
"UseSMTPServerForEmail": "Fer servir un servidor SMTP per el correu",
|
|
|
331 |
"UserId": "Identificador Usuari",
|
|
|
332 |
"Username": "Usuari",
|
333 |
"VBarGraph": "Gràfic de barres",
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
334 |
"Value": "Valor",
|
335 |
"View": "Vista",
|
|
|
|
|
336 |
"Visit": "Visita",
|
337 |
"VisitConvertedGoal": "La visita ha convertit al menys un objectiu",
|
338 |
"VisitConvertedGoalId": "La visita ha convertit un id d'objectiu especific",
|
339 |
"VisitConvertedNGoals": "La visita ha convertit %s objectius",
|
340 |
"VisitDuration": "Temps mig de visita (en segons)",
|
|
|
341 |
"VisitType": "Tipus de visitant",
|
342 |
"VisitTypeExample": "Per exemple, per seleccionar tots els visitants que han retornat al lloc web, incloent els que han comprat alguna cosa en anteriors visites, la petició de l'API tindria %s",
|
|
|
343 |
"Visitor": "Visita",
|
|
|
344 |
"VisitorID": "ID del visitant",
|
345 |
"VisitorIP": "Ip del visitant",
|
|
|
346 |
"VisitorSettings": "Configuració del visitant",
|
347 |
"Visitors": "Visitants",
|
348 |
"VisitsWith": "Visites amb %s",
|
|
|
349 |
"Warning": "Avís",
|
|
|
|
|
350 |
"WarningFileIntegrityNoManifest": "La verificació de la integritat dels fitxers no s'ha pogut fer perquè falta el manifest.inc.php.",
|
351 |
-
"
|
|
|
352 |
"WarningPasswordStored": "%1$sAlerta:%2$s Aquesta contrasenya es guardarà en un fitxer de configuració visible on tothom pot accedir.",
|
|
|
|
|
|
|
353 |
"Website": "Lloc web",
|
354 |
"Weekly": "Setmanalment",
|
355 |
"WeeklyReport": "setmanal",
|
@@ -357,13 +524,18 @@
|
|
357 |
"WellDone": "Ben fet!",
|
358 |
"Widget": "Giny",
|
359 |
"Widgets": "Ginys",
|
|
|
|
|
360 |
"YearlyReport": "anual",
|
361 |
"YearlyReports": "Informe anual",
|
362 |
"YearsDays": "%1$s anys %2$s dies",
|
363 |
"Yes": "Sí",
|
364 |
"YouAreCurrentlyUsing": "Ara mateix estàs fent servir el Matomo %s.",
|
|
|
365 |
"YouMustBeLoggedIn": "Has d'entrar per accedir a aquesta funcionalitat.",
|
366 |
-
"
|
|
|
|
|
367 |
},
|
368 |
"Mobile": {
|
369 |
"AboutPiwikMobile": "Sobre el Matomo al mòbil",
|
@@ -375,6 +547,7 @@
|
|
375 |
"Advanced": "Avançat",
|
376 |
"AnonymousAccess": "Accès anònim",
|
377 |
"AnonymousTracking": "Rastreig anònim",
|
|
|
378 |
"ChooseHttpTimeout": "Seleccioneu el temps d'expiració HTTP",
|
379 |
"ChooseMetric": "Trieu una mètrica",
|
380 |
"ChooseReport": "Trieu un informe",
|
@@ -383,20 +556,34 @@
|
|
383 |
"DefaultReportDate": "Data de l'informe",
|
384 |
"EmailUs": "Envia'ns un email",
|
385 |
"EnableGraphsLabel": "Mostra gràfiques",
|
|
|
|
|
|
|
386 |
"EvolutionGraph": "Gràfic històric",
|
|
|
387 |
"HelpUsToImprovePiwikMobile": "T'agradaria activar el rastreig anònim de l'us del Matomo en el teu mòbil?",
|
|
|
388 |
"HowtoDeleteAnAccountOniOS": "Pasa de l'esquerra cap a la dreta per eliminar un compte",
|
|
|
|
|
|
|
389 |
"HttpTimeout": "Temps d'expiració HTTP",
|
390 |
"IgnoreSslError": "Ignorar error SSL",
|
|
|
391 |
"LastUpdated": "Ultima actualització: %s",
|
392 |
"LoadingReport": "Carregant %s",
|
393 |
"LoginCredentials": "Credencials",
|
|
|
394 |
"LoginUseHttps": "Utilitza https",
|
|
|
|
|
395 |
"MultiChartLabel": "Mostra minigràfics",
|
396 |
"NavigationBack": "Enrere",
|
397 |
"NetworkError": "Error de xarxa",
|
|
|
398 |
"NetworkErrorWithStatusCodeShort": "Error de xarxa %s",
|
399 |
"NetworkNotReachable": "La xarxa no és accessible",
|
|
|
400 |
"NoDataShort": "Sense óinformaci",
|
401 |
"NoPiwikAccount": "No teniu un compte de Matomo?",
|
402 |
"NoReportsShort": "Sense informes",
|
@@ -404,112 +591,166 @@
|
|
404 |
"NoVisitorsShort": "Sense visitants",
|
405 |
"NoWebsiteFound": "No s'ha trobat el lloc web",
|
406 |
"NoWebsitesShort": "Sense llocs web",
|
|
|
|
|
407 |
"PullDownToRefresh": "Estireu per actualitzar...",
|
408 |
"RatingDontRemindMe": "No em recordis",
|
409 |
"RatingNotNow": "Ara no",
|
410 |
"RatingNow": "D'acord, el puntuaré ara",
|
|
|
411 |
"ReleaseToRefresh": "Solta per refrescar...",
|
412 |
"Reloading": "Carregant...",
|
|
|
|
|
|
|
413 |
"SaveSuccessError": "La URL del Matomo o la combinació d'usuari contrasenya es incorrecta.",
|
414 |
"SearchWebsite": "Cerca llocs web",
|
415 |
"ShowAll": "Mostra-ho tot",
|
416 |
"ShowLess": "Mostra menys",
|
417 |
"StaticGraph": "Gràfic de visió general",
|
418 |
"TopVisitedWebsites": "Llocs web més visitats",
|
419 |
-
"TryIt": "Prova-ho",
|
420 |
"UseSearchBarHint": "Nomes es mostren els %s primers llocs webs aquí. Utilitzeu la barra de cerca per accedir als altres llocs web.",
|
421 |
"ValidateSslCertificate": "Validar certificat SSL",
|
422 |
"VerifyAccount": "Verificant el compte",
|
423 |
"VerifyLoginData": "Asegureu-vos del que el vostre nom d'usuari i contrasenya és correcte.",
|
424 |
-
"YouAreOffline": "Ho sentim, actualment estàs fora de línia
|
425 |
},
|
426 |
"RowEvolution": {
|
427 |
"AvailableMetrics": "Mètriques disponibles",
|
428 |
-
"CompareDocumentation": "Feu click a l'enllaç a continuació per obrir aquesta finestra emergent per la mateixa taula i comparar múltiples registres <br
|
429 |
"CompareRows": "Compareu registres",
|
430 |
"ComparingRecords": "Comparant %s files",
|
431 |
"Documentation": "Feu click a les mètriques per mostrarle al gràfic d'evolució. Utiltizeu la tecla shift per mostrar múltiples mètriques d'una vegada.",
|
432 |
"MetricBetweenText": "entre %1$s i %2$s",
|
433 |
"MetricChangeText": "%s en el període",
|
|
|
434 |
"MetricsFor": "Mètriques per %s",
|
435 |
"MultiRowEvolutionTitle": "Evolució de múltiples files",
|
436 |
"PickARow": "Seleccioneu una fila per comparar",
|
437 |
"PickAnotherRow": "Seleccioneu una altra fila per comparar"
|
438 |
},
|
439 |
"API": {
|
440 |
-
"
|
|
|
|
|
|
|
441 |
"KeepTokenSecret": "El token_auth es tan secret com el vostre usuari i la vostra contrasenya, %1$s no compartiu el seu %2$s!",
|
442 |
-
"
|
443 |
-
"
|
444 |
-
"
|
445 |
-
"
|
|
|
|
|
|
|
|
|
|
|
446 |
},
|
447 |
"Actions": {
|
|
|
|
|
|
|
448 |
"AvgGenerationTimeTooltip": "Promig basat en %1$s accessos %2$s entre %3$s i %4$s",
|
|
|
|
|
|
|
|
|
449 |
"ColumnClicks": "Clics",
|
450 |
-
"ColumnClicksDocumentation": "Nombre de vegades que s'ha fet clic en aquest
|
451 |
"ColumnDownloadURL": "URL de descàrrega",
|
|
|
452 |
"ColumnEntryPageTitle": "Títol de la pàgina d'entrada",
|
453 |
"ColumnEntryPageURL": "URL de la pàgina d'entrada",
|
|
|
454 |
"ColumnExitPageTitle": "URL de la pàgina de sortida",
|
455 |
"ColumnExitPageURL": "URL de la pàgina de sortida",
|
|
|
|
|
|
|
456 |
"ColumnNoResultKeyword": "Paraula clau sense cap resultat de cerca",
|
457 |
"ColumnPageName": "Nom de la pàgina",
|
458 |
-
"ColumnPagesPerSearch": "Pàgines dels resultats de la cerca",
|
459 |
-
"ColumnPagesPerSearchDocumentation": "Els visitants busquen al vostre lloc web i a vegades cliquen sobre el botó següent. Aquest nombre es la mitga de pàgines de resultats de la cerca vistes per aquesta paraula clau.",
|
460 |
"ColumnPageURL": "URL de la pàgina",
|
|
|
|
|
|
|
461 |
"ColumnSearchCategory": "Categoria de cerca",
|
462 |
-
"
|
463 |
-
"ColumnSearchesDocumentation": "Nombre de visitants que han cercat aquesta paraula clau al cercador de la vostra pàgina web.",
|
464 |
"ColumnSearchExitsDocumentation": "El percentatge de visites que marxen del vostre lloc web desprès de cercar aquesta paraula al cercador del vostre lloc web.",
|
465 |
"ColumnSearchResultsCount": "Resultats de la cerca",
|
|
|
|
|
466 |
"ColumnSiteSearchKeywords": "Paraules clau úniques",
|
467 |
"ColumnUniqueClicks": "Clics únics",
|
468 |
-
"ColumnUniqueClicksDocumentation": "
|
469 |
"ColumnUniqueDownloads": "Descàrregues úniques",
|
470 |
"ColumnUniqueOutlinks": "Enllaços de sortida únics",
|
471 |
"DownloadsReportDocumentation": "En aquest informe podeu observar quins fitxers han descarrregats els visitants. %s El Matomo només té constància dels clicks als enllaços de descarga, desconeix si la descàrrega s'ha completat o no.",
|
|
|
|
|
472 |
"EntryPageTitles": "Títols de les pàgines d'entrada",
|
473 |
"EntryPageTitlesReportDocumentation": "Aquest informe conté la informació sobre els títols de les pàgines d'entrada que s'han utilitzat durant el període especificat.",
|
|
|
|
|
|
|
474 |
"ExitPageTitles": "Títols de les pàgines de sortida",
|
475 |
"ExitPageTitlesReportDocumentation": "Aquest informe conté els títols de les pàgins de sortida que s'han utiltizat durant el període especificat.",
|
|
|
|
|
|
|
|
|
476 |
"OneSearch": "1 cerca",
|
477 |
-
"OutlinkDocumentation": "Un enllaç
|
478 |
-
"OutlinksReportDocumentation": "Aquest informe mostra una
|
479 |
-
"
|
480 |
"PageTitlesReportDocumentation": "Aquest informe conté informació sobre els títols de les pàgines que s'han visitat. %1$s El títol de la pàgina es el tag HTML: %2$s, que es mostra al títol de la finestra en la majoría de navegadors.",
|
|
|
|
|
481 |
"PageUrls": "URLs de les pàgines",
|
482 |
-
"
|
483 |
-
"
|
484 |
-
"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
485 |
"SiteSearchFollowingPagesDoc": "Quan els visitants cerquen al teu lloc web, estan buscant una pàgina, un contingut, un producte o un servei en particular. Aquest informe mostra les pàgines que han estat clicades més vegades desprès d'una cerca interna. En altres paraules, la llista de pàgines que han estat més cercades pels visitants que ja están al vostre lloc web.",
|
486 |
-
"SiteSearchIntro": "Observar les cerques que els visitants fan al vostre lloc web és una forma molt efectiva d'aprendre més sobre el que està cercant la
|
487 |
-
"SiteSearchKeyword": "Paraula clau (Cerca
|
488 |
-
"
|
489 |
-
"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
490 |
"SubmenuPagesEntry": "Pàgines d'entrada",
|
491 |
"SubmenuPagesExit": "Pàgines de sortida",
|
492 |
-
"SubmenuPageTitles": "Títols de les pàgines",
|
493 |
"SubmenuSitesearch": "Cerca al lloc",
|
|
|
494 |
"WidgetEntryPageTitles": "Títols de les pàgines d'entrada",
|
495 |
"WidgetExitPageTitles": "Títols de les pàgines de sortida",
|
|
|
|
|
|
|
496 |
"WidgetPagesEntry": "Pàgines d'entrada",
|
497 |
"WidgetPagesExit": "Pàgines de sortida",
|
498 |
-
"
|
499 |
-
"WidgetPageTitlesFollowingSearch": "Títols de les pàgines desprès d'una cerca Interna",
|
500 |
-
"WidgetPageUrlsFollowingSearch": "Pàgines despes d'una cerca interna",
|
501 |
-
"WidgetSearchCategories": "Categoríes de cerca",
|
502 |
"WidgetSearchKeywords": "Paraules de cerca al lloc",
|
503 |
-
"WidgetSearchNoResultKeywords": "Paraules
|
504 |
-
"PagesSubcategoryHelp3": "Fes servir les icones de més i menys a l'esquerra per navegar."
|
505 |
},
|
506 |
"Annotations": {
|
507 |
-
"AddAnnotationsFor": "Afegir una anotació per %s",
|
508 |
"AnnotationOnDate": "Anotació per %1$s: %2$s",
|
509 |
"Annotations": "Anotacions",
|
510 |
-
"ClickToDelete": "Feu click per eliminar l'
|
511 |
-
"ClickToEdit": "Feu click per editar aquesta
|
512 |
-
"ClickToEditOrAdd": "Feu click per editar o afegir una
|
513 |
"ClickToStarOrUnstar": "Feu click per marcar o desmarcar aquesta nota.",
|
514 |
"CreateNewAnnotation": "Crea una nova anotació...",
|
515 |
"EnterAnnotationText": "Introduix la teva nota...",
|
@@ -524,141 +765,572 @@
|
|
524 |
"YouCannotModifyThisNote": "No podeu modificar aquesta nota perquè o bé no l'heu creada vosatres, o no teni accès d'administrador per aquest lloc web."
|
525 |
},
|
526 |
"Contents": {
|
|
|
|
|
|
|
527 |
"ContentName": "Nom del contingut",
|
528 |
-
"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
529 |
},
|
530 |
"CoreAdminHome": {
|
|
|
531 |
"Administration": "Administració",
|
|
|
532 |
"BrandingSettings": "Preferències del Branding",
|
|
|
|
|
533 |
"ClickHereToOptIn": "Feu click aquí per apuntar-vos.",
|
534 |
"ClickHereToOptOut": "Feu click aquí per desapuntar-vos.",
|
535 |
-
"
|
|
|
|
|
|
|
|
|
|
|
536 |
"CustomLogoHelpText": "Podeu personalitzar el logo de Matomo que es mostrarà a l'interfície d'usuari i als informes d'emails.",
|
|
|
|
|
537 |
"EmailServerSettings": "Configuració del servidor de correu",
|
|
|
|
|
|
|
|
|
|
|
|
|
538 |
"ImageTracking": "Seguiment per imatge",
|
539 |
"ImageTrackingIntro1": "Quan un visitant ha deshabilitat el JavaScript, o quan el JavaScript no es pot fer servir, podeu fer servir un enllaç a una imatge de seguiment per seguir les vistes.",
|
540 |
"ImageTrackingIntro2": "Generar l'enllaç de sota i copiar-enganxar el codi HTML generat a la pàgina. Si esteu fent servir això com alternativa al seguiment amb JavaScript, heu d'envoltar el codi en %1$s tags.",
|
541 |
"ImageTrackingIntro3": "Per la llista completa d'opcions que podeu fer servir amb una imatge de seguiment, mireu a la %1$sDocumentació de Tracking API%2$s.",
|
542 |
"ImageTrackingLink": "Enllaç de seguiment amb imatge",
|
|
|
|
|
543 |
"ImportingServerLogs": "Important els Registres del Servidor",
|
544 |
"ImportingServerLogsDesc": "Una alternativa a seguir els visitants a través del navegador (tant amb JavaScript com amb un enllaç de imatge) és important continuament els registres del servidor. Informeu-vos més a %1$sServer Log File Analytics%2$s.",
|
545 |
-
"
|
|
|
|
|
|
|
|
|
|
|
|
|
546 |
"JSTrackingIntro5": "Si desitja fer més que rastrejar visites de pàgina, revisa la %1$sDocumentació javascript de Matomo %2$s sobre la llista de funcions disponibles. Utilitzant aquestes funcions, pots rastrejar objectius, variables personalitzades, compres d'e-comerç, compres abandonades i més.",
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
547 |
"LogoUpload": "Seleccioneu un logo per pujar",
|
|
|
|
|
|
|
|
|
|
|
548 |
"MenuGeneralSettings": "Configuració general",
|
|
|
|
|
|
|
|
|
|
|
549 |
"OptOutComplete": "Baixa complerta. Les teves visites en aquest lloc web no es tindrán en compte per l'eina d'anàlisis Web.",
|
550 |
"OptOutCompleteBis": "Teniu en compte que si borreu les cookies, borreu la cookie de baixa o si canvieu d'ordenador o de navegadaor web, haureu de tornar a realitzar el proces de baixa.",
|
|
|
|
|
|
|
|
|
551 |
"OptOutExplanation": "El Matomo, podeu afegir el següent codi HTML a una de les pàgiens del vostre lloc web, per exemple a la pàgina de política de privacitat.",
|
|
|
552 |
"OptOutForYourVisitors": "Pàgina de baixa del Matomo pels vostres visitants",
|
|
|
|
|
553 |
"PiwikIsInstalledAt": "El Matomo està instal·lat a",
|
554 |
-
"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
555 |
"TrustedHostSettings": "Nom del host de Matomo de confiança",
|
|
|
|
|
|
|
|
|
556 |
"UseCustomLogo": "Utilitza un logo personalitzat",
|
557 |
"ValidPiwikHostname": "Nom del host de Matomo vàlid",
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
558 |
"YouAreOptedOut": "Actualment esteu donat de baixa.",
|
559 |
"YouMayOptOut": "Podeu escollir no tenir un únic nombre d'identificació assignat al vostre ordinador per evitar l'agregació i l'anàlisi de la informació recollida en aquest lloc web.",
|
|
|
|
|
560 |
"YouMayOptOutBis": "Per prendre aquesta decisió, feu click a continuació per rebre una cookie de baixa."
|
561 |
},
|
562 |
"CoreHome": {
|
|
|
|
|
563 |
"CategoryNoData": "No hi ha dades en aquesta categoria. Proveu d'incloure tota la població.",
|
|
|
|
|
|
|
564 |
"CheckForUpdates": "Cerca actualitzacions",
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
565 |
"DataForThisReportHasBeenPurged": "La informació d'aquest informés és anterior a %s mesos d'antiguitat i s'ha purgat.",
|
|
|
566 |
"DataTableExcludeAggregateRows": "Es mostren les files aggrupades %s Amaga-ho",
|
|
|
567 |
"DataTableIncludeAggregateRows": "No es mostren les files agrupades %s Mostra-les",
|
|
|
|
|
568 |
"Default": "per defecte",
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
569 |
"ExcludeRowsWithLowPopulation": "Es mostren totes les files %s No mostris la població inferior",
|
570 |
-
"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
571 |
"IncludeRowsWithLowPopulation": "No es mostren les files amb polbació inferior %s Mostra totes les files",
|
572 |
"InjectedHostEmailBody": "Hola, He provat d'accedir al Matomo avui i m'he trobat amb l'avís de nom de la màquina desconegut.",
|
573 |
"InjectedHostEmailSubject": "S'ha accedit al Matomo amb un nom de màquina desconegut: %s",
|
574 |
"InjectedHostNonSuperUserWarning": "%1$sClick here to access Matomo safely%2$s i eliminar aaquest avíst. Potse també voldreu contractar amb l'administrador del vostre Matomo i notificar-li aquesta incidència (%3$sclick here to email%4$s).",
|
575 |
"InjectedHostSuperUserWarning": "Pot ser que el Matomo estigui mal configurat (per exemple, si el Matomo s'ha mogut a un nou servidor o URL). Podeu %1$sfer click aquí i afegir %2$s com el nom de la màquina vàlid (si hi confieu)%3$s, o bé %4$s fer click aquí %5$s per accedir al Matomo de forma segura%6$s.",
|
576 |
"InjectedHostWarningIntro": "Esteu accedint al Matomo desde %1$s, però el Matomo està configurat per escoltar a l'adreça: %2$s.",
|
577 |
-
"JavascriptDisabled": "
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
578 |
"NoPrivilegesAskPiwikAdmin": "Esteu identificat com a '%1$s' però sembla que no teniu cap permís establert al Matomo. %2$s Pregunteu al vostre administrador de Matomo (feu click per enviar un email)%3$s que us dongui access per veure un lloc web.",
|
|
|
|
|
|
|
|
|
|
|
|
|
579 |
"PeriodRange": "Rang",
|
|
|
|
|
|
|
|
|
|
|
|
|
580 |
"ReportGeneratedOn": "Informe generat el %s",
|
581 |
"ReportGeneratedXAgo": "Informe generat fa %s",
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
582 |
"ShowJSCode": "Mostra el codi JavaScript necessari",
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
583 |
"ThereIsNoDataForThisReport": "No hi ha informació per aquest informe.",
|
584 |
"UnFlattenDataTable": "Aquest informe es pla %s Feu-lo jeràrquic",
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
585 |
"WebAnalyticsReports": "Informe d'analítica web",
|
586 |
"YouAreUsingTheLatestVersion": "Esteu fent servir l'última versió de Matomo!",
|
587 |
-
"
|
588 |
},
|
589 |
"CorePluginsAdmin": {
|
590 |
-
"
|
591 |
-
"
|
|
|
|
|
592 |
"Active": "Actiu",
|
593 |
"Activity": "Activitat",
|
594 |
-
"
|
595 |
-
"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
596 |
"Inactive": "Inactiu",
|
597 |
-
"
|
598 |
-
"
|
599 |
-
"
|
600 |
-
"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
601 |
"PluginsManagement": "Gestiona els connectors",
|
602 |
"Status": "Estat",
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
603 |
"Version": "Versió",
|
604 |
-
"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
605 |
},
|
606 |
"CoreUpdater": {
|
607 |
-
"
|
608 |
-
"
|
609 |
-
"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
610 |
"DownloadX": "Descarrega %s",
|
|
|
|
|
|
|
611 |
"EmptyDatabaseError": "La base de dades %s està buida. Heu d'editar o esborrar el fitxer de configuració del Matomo.",
|
612 |
"ErrorDIYHelp": "Si sou un usuari avançat i trobeu un error en l'actualització de la base de dades:",
|
613 |
"ErrorDIYHelp_1": "identifiqueu i corregiu l'origen de l'error (per exemple: memory_limit o max_execution_time)",
|
614 |
-
"ErrorDIYHelp_2": "executeu les consultes restants
|
615 |
-
"ErrorDIYHelp_3": "actualitzeu la taula `option
|
616 |
-
"ErrorDIYHelp_4": "torneu a
|
617 |
-
"ErrorDIYHelp_5": "informeu sobre el problema (i la solució) per tal
|
618 |
-
"ErrorDuringPluginsUpdates": "
|
619 |
-
"ExceptionAlreadyLatestVersion": "
|
620 |
-
"ExceptionArchiveEmpty": "Arxiu buit",
|
621 |
"ExceptionArchiveIncompatible": "Arxiu incompatible: %s",
|
622 |
-
"ExceptionArchiveIncomplete": "L'arxiu és incomplet: manquen alguns fitxers (per exemple
|
623 |
-
"
|
624 |
-
"
|
|
|
|
|
|
|
625 |
"HelpMessageIntroductionWhenWarning": "La actualització s'ha completat amb èxit, però hi ha hagut alguns problemes durant el procés. Si us plau, llegiu les descripcions que hi ha a sobre per a saber més detalls. Si voleu més informació:",
|
|
|
|
|
626 |
"InstallingTheLatestVersion": "S'està instal·lant la darrera versió",
|
627 |
-
"
|
628 |
-
"
|
629 |
-
"
|
630 |
-
"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
631 |
"PiwikUpdatedSuccessfully": "El Matomo s'ha actualitzat correctament!",
|
632 |
-
"PiwikWillBeUpgradedFromVersionXToVersionY": "La base de dades s'actualitzarà de la versió %1$s a la nova %2$s.",
|
|
|
|
|
633 |
"ReadyToGo": "Preparat?",
|
634 |
-
"
|
635 |
-
"
|
636 |
-
"
|
637 |
-
"
|
638 |
-
"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
639 |
"UpdateAutomatically": "Actualitza automàticament",
|
640 |
-
"
|
641 |
-
"
|
642 |
-
"
|
643 |
-
"
|
644 |
-
"
|
645 |
-
"
|
646 |
-
"
|
647 |
-
"
|
648 |
-
"
|
649 |
-
"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
650 |
},
|
651 |
"DBStats": {
|
652 |
-
"DatabaseUsage": "Ús de la base de dades",
|
653 |
-
"DataSize": "Grandària de les dades",
|
654 |
"DBSize": "Mida de la BD",
|
|
|
|
|
655 |
"EstimatedSize": "Mida estimada",
|
656 |
"IndexSize": "Grandària del l'índex",
|
657 |
"LearnMore": "Per obtenir més informació sobre com el Matomo procesa la informació i com fer que el Matomo funcioni correctament en llocs amb un tràfic mitja o elevat, consulteu la següent documentació: %s.",
|
658 |
"MainDescription": "El Matomo desa totes les anàlisis web la base de dades MySQL. Ara per ara, les taules del Matomo fan servir %s.",
|
659 |
-
"MetricDataByYear": "Taules de mètriques per any
|
660 |
"MetricTables": "Taules de mètriques",
|
661 |
"OtherTables": "Altres taules",
|
|
|
662 |
"ReportDataByYear": "Taules d'informes per any",
|
663 |
"ReportTables": "Taules d'informes",
|
664 |
"RowCount": "Nombre de files",
|
@@ -673,7 +1345,8 @@
|
|
673 |
"CopyDashboardToUser": "Copiar tauler a l'usuari",
|
674 |
"CreateNewDashboard": "Crear un nou tauler",
|
675 |
"Dashboard": "Tauler",
|
676 |
-
"
|
|
|
677 |
"DashboardEmptyNotification": "El vostre tauler no conté cap giny. Comenceu per afegir alguns ginys o restablieu el tauler a la selecció de ginys per defecte.",
|
678 |
"DashboardName": "Nom del tauler:",
|
679 |
"DashboardOf": "Tauler de %s",
|
@@ -684,16 +1357,17 @@
|
|
684 |
"ManageDashboard": "Administrar tauler",
|
685 |
"Maximise": "Maximitza",
|
686 |
"Minimise": "Minimitza",
|
687 |
-
"NotUndo": "No podreu desfer aquesta
|
688 |
"PluginDescription": "El teu taulell d'analítica web. Personalitza el teu taulell afegint nous ginys, arrossega i solta per a moure'ls i canvia l'estructura de columnes. Cada usuari pot tenir el seu taulell personalitzat.",
|
689 |
"RemoveDashboard": "Elimina el tauler",
|
690 |
"RemoveDashboardConfirm": "Esteu segurs que voleu eliminar el tauler \"%s\"?",
|
|
|
691 |
"RenameDashboard": "Reanomena el tauler",
|
692 |
"ResetDashboard": "Reinicialitza el tauler",
|
693 |
"ResetDashboardConfirm": "Esteu segurs que voleu reiniciar la disposició del vostre tauler a la selecció de ginys per defecte?",
|
694 |
"SelectDashboardLayout": "Seleccioneu la nova disposició del vostre tauler",
|
695 |
"SelectWidget": "Escolliu el giny que voleu afegir a la consola",
|
696 |
-
"SetAsDefaultWidgets": "
|
697 |
"SetAsDefaultWidgetsConfirm": "Esteu segurs que voleu definir la selecció de ginys i la disposició del tauler actuals per a la plantilla de tauler per defecte?",
|
698 |
"SetAsDefaultWidgetsConfirmHelp": "Aquesta selecció de ginys i la disposició de columnes del tauler es faran servir quan qualsevol usuari crei un nou tauler o quan s'utiltiza la funció \"%s\".",
|
699 |
"TopLinkTooltip": "Mostra els informes d'analítica web per %s.",
|
@@ -703,100 +1377,325 @@
|
|
703 |
"DevicePlugins": {
|
704 |
"BrowserWithNoPluginsEnabled": "%1$s sense connectors activats",
|
705 |
"BrowserWithPluginsEnabled": "%1$s amb els connectors %2$s activats",
|
706 |
-
"PluginDescription": "
|
|
|
707 |
"WidgetPlugins": "Llistat de connectors",
|
708 |
"WidgetPluginsDocumentation": "Aquest informe mostra quins connectors tenen els vostres visitants activades. Aquesta informació pot ser important per determinar la forma correcta de mostrar el contingut."
|
709 |
},
|
710 |
"DevicesDetection": {
|
|
|
|
|
711 |
"BrowserEngine": "Navegador",
|
712 |
"BrowserEngineDocumentation": "Aquest gràfic mostra els navegadors dels vostres visitants dividits en famílies. %s La informació més important per als desenvolupadors web es quin tipus de sistema de renderització estan utilitzant els seus visitants. Les etiquetiquetes contenen els noms dels sistemes, seguit pel navegador més comú utilitzant aquest sistema.",
|
713 |
"BrowserEngines": "motors de navegació",
|
714 |
"BrowserFamily": "Família del navegador",
|
715 |
-
"Browsers": "Navegadors",
|
716 |
"BrowserVersion": "Versió del navegador",
|
717 |
"BrowserVersions": "versions del navegador",
|
|
|
718 |
"Camera": "càmera",
|
719 |
"CarBrowser": "navegador de cotxe",
|
720 |
-
"
|
|
|
721 |
"ColumnBrowser": "Navegador",
|
722 |
"ColumnOperatingSystem": "Sistema operatiu",
|
723 |
"ColumnOperatingSystemVersion": "Versió del sistema operatiu",
|
724 |
"Console": "Consola",
|
725 |
-
"dataTableLabelBrands": "Marca",
|
726 |
-
"dataTableLabelModels": "Model",
|
727 |
-
"dataTableLabelSystemVersion": "Versió del sistema operatiu",
|
728 |
-
"dataTableLabelTypes": "Tipus",
|
729 |
"Device": "Dispositiu",
|
730 |
"DeviceBrand": "Marca del dispositiu",
|
|
|
731 |
"DeviceBrands": "Marques de dispositius",
|
732 |
"DeviceDetection": "Detecció de dispositius",
|
733 |
"DeviceModel": "Model del dispositiu",
|
|
|
734 |
"DeviceModels": "Models de dispositiu",
|
735 |
-
"DevicesDetection": "Dispositius del visitant",
|
736 |
"DeviceType": "Tipus de dispositiu",
|
|
|
737 |
"DeviceTypes": "Tipus de dispositius",
|
|
|
|
|
738 |
"FeaturePhone": "Característiques del telèfon",
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
739 |
"OperatingSystemFamilies": "Famílies del sistema operatiu",
|
|
|
740 |
"OperatingSystemFamily": "Família del Sistema Operatiu",
|
741 |
-
"OperatingSystems": "Sistemes operatius",
|
742 |
"OperatingSystemVersions": "Versions del sistema operatiu",
|
|
|
|
|
|
|
|
|
|
|
743 |
"PluginDescription": "Proporciona informació extesa sobre els dispositius dels usuaris, tals com marca (fabricant), model (versió del dispositiu), tipus de dispositiu (tv, consola, telèfon intel·ligent, d'escriptori, etc.) i més.",
|
|
|
744 |
"SmartDisplay": "Pantalla intel·ligent",
|
|
|
745 |
"Smartphone": "Telèfon intel·ligent",
|
746 |
-
"
|
747 |
-
"Devices": "Dispositius",
|
748 |
-
"GenericDevice": "Genèric %s",
|
749 |
-
"MobileDevice": "Dispositiu mòbil",
|
750 |
-
"Tablet": "Tauleta",
|
751 |
-
"Phablet": "Phablet",
|
752 |
"TV": "Televisió",
|
|
|
753 |
"UserAgent": "Agent d'usuari",
|
754 |
-
"
|
|
|
755 |
"WidgetBrowsers": "Navegadors",
|
756 |
-
"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
757 |
},
|
758 |
"Events": {
|
|
|
|
|
|
|
|
|
759 |
"Event": "Esdeveniment",
|
|
|
|
|
|
|
|
|
|
|
760 |
"EventCategory": "Categoria d'esdeveniment",
|
761 |
"EventName": "Nom de l'esdeveniment",
|
762 |
"EventNames": "Noms dels esdeveniments",
|
|
|
|
|
|
|
|
|
|
|
763 |
"Events": "Esdeveniments",
|
|
|
|
|
764 |
"EventsWithValue": "Esdeveniments amb valor",
|
765 |
-
"EventsWithValueDocumentation": "Nombre d'esdeveniments que tenen un valor",
|
|
|
766 |
"MaxValueDocumentation": "El valor màxim per aquest esdeveniment",
|
767 |
-
"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
768 |
},
|
769 |
"Feedback": {
|
770 |
-
"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
771 |
"IWantTo": "Jo vull:",
|
772 |
-
"LearnWaysToParticipate": "
|
773 |
-
"ManuallySendEmailTo": "
|
774 |
-
"
|
775 |
-
"
|
776 |
-
"
|
777 |
-
"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
778 |
},
|
779 |
"GeoIp2": {
|
780 |
-
"AssumingNonApache": "No
|
781 |
-
"
|
|
|
|
|
|
|
782 |
"CannotListContent": "No s'ha pogut llistar el contingut de %1$s: %2$s",
|
|
|
|
|
|
|
783 |
"DownloadingDb": "Descarregant %s",
|
784 |
-
"
|
785 |
-
"FoundApacheModules": "
|
786 |
-
"GeoIPImplHasAccessTo": "Aquesta implementació de GeoIP té accés als següents tipus de bases de dades",
|
787 |
"GeoIPDatabases": "Base de dades GeoIP",
|
788 |
-
"
|
789 |
-
"
|
790 |
-
"
|
791 |
-
"
|
792 |
-
"
|
793 |
-
"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
794 |
"HttpServerModule": "Mòdul del Servidor HTTP",
|
795 |
-
"
|
796 |
-
"ISPDatabase": "Base de dades
|
797 |
-
"
|
798 |
-
"
|
799 |
-
"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
800 |
},
|
801 |
"Goals": {
|
802 |
"AbandonedCart": "Cistella abandonada",
|
@@ -805,38 +1704,49 @@
|
|
805 |
"AddNewGoalOrEditExistingGoal": "%1$sAfegeix un nou objectiu%2$s o %3$sEdita objectius existents%4$s",
|
806 |
"AllowGoalConvertedMoreThanOncePerVisit": "Permetre convertir un objectiu més d'una vegada per visita",
|
807 |
"AllowMultipleConversionsPerVisit": "Permetre múltiples conversions per visita",
|
|
|
808 |
"BestCountries": "Els millors paísos amb conversions són:",
|
809 |
"BestKeywords": "Les paraules clau amb més conversions són:",
|
810 |
"BestReferrers": "Els llocs webs de referència amb més conversions són:",
|
|
|
811 |
"CaseSensitive": "Concidència sensible a minúscules\/majúscules",
|
|
|
|
|
|
|
812 |
"CategoryTextReferrers_Referrers": "Referents",
|
813 |
"CategoryTextVisitsSummary_VisitsSummary": "atribut d'usuari",
|
814 |
-
"CategoryTextDevicesDetection_DevicesDetection": "
|
7 |
"AboutPiwikX": "Sobre Matomo %s",
|
8 |
"Action": "Acció",
|
9 |
"Actions": "Accions",
|
10 |
+
"Add": "Afegeix",
|
11 |
"AfterEntry": "després d'entrar aquí",
|
12 |
"All": "Tots",
|
13 |
"AllWebsitesDashboard": "Tauler de tots els llocs web",
|
14 |
"AllowPiwikArchivingToTriggerBrowser": "Permetre que l'arxivat del Matomo es dispari quan els informes es veuen des del navegador",
|
15 |
"And": "i",
|
16 |
"Apply": "Aplica",
|
17 |
+
"ArchivingInlineHelp": "Per llocs amb trànsit entre mig i alt, es recomana desactivar l'arxivat del Matomo des del navegador. En canvi, recomanem que configureu una tasca de cron per processar els informes de Matomo cada hora.",
|
18 |
+
"ArchivingTriggerDescription": "Recomanat per a instal·lacions grans de Matomo, es pot %1$sconfigurar una tasca programada%2$s per a processar les entrades automàticament.",
|
19 |
+
"ArchivingTriggerSegment": "L'ús de segments personalitzats igualment iniciarà el processament d'arxius.",
|
20 |
"AuthenticationMethodSmtp": "Mètode d'autenticació SMTP",
|
21 |
"AverageOrderValue": "Valor mig de les comandes",
|
22 |
"AveragePrice": "Preu mig",
|
23 |
+
"AverageQuantity": "Quantitat mitjana",
|
24 |
+
"AverageX": "Mitjana %s",
|
25 |
"BackToPiwik": "Torna al Matomo",
|
26 |
"Broken": "Trencat",
|
27 |
"BrokenDownReportDocumentation": "Està separada en diferents informes, que es mostren amb línies de punts al peu de la pàgina. Podeu augmentar aquests gràfics clicant en l'informe que voleu veure.",
|
28 |
+
"Cancel": "Cancel·la",
|
29 |
"CannotUnzipFile": "No es pot descomprimir el fitxer %1$s: %2$s",
|
30 |
+
"ChangeInX": "Canvi en %1$s",
|
31 |
"ChangePassword": "Canvia la contrasenya",
|
32 |
+
"ChangeTagCloudView": "Tingueu en compte que podeu veure l'informe en altres formes que en núvol d'etiquetes. Feu servir els controls al peu de l'informe per a fer-ho.",
|
33 |
"ChooseDate": "Seleccioneu una data, la data seleccionada actualment es: %s",
|
34 |
"ChooseLanguage": "Tria idioma",
|
35 |
"ChoosePeriod": "Triar període",
|
36 |
"Clear": "Neteja",
|
37 |
+
"ClickHere": "Feu clic aquí per a més informació.",
|
38 |
+
"ClickToRemoveComp": "Feu clic per eliminar aquesta comparació.",
|
39 |
+
"ClickToSearch": "Cliqueu per a cercar",
|
40 |
"Close": "Tanca",
|
41 |
"ColumnActionsPerVisit": "Accions per visita",
|
42 |
+
"ColumnActionsPerVisitDocumentation": "El nombre mitjà d'accions (pàgines vistes, descarregues o enllaços de sortida) que s'han fet durant les visites.",
|
43 |
+
"ColumnAverageGenerationTime": "Temps mitjà de generació",
|
44 |
+
"ColumnAverageGenerationTimeDocumentation": "El temps mitjà per generar la pàgina. Aquesta mètrica inclou el temps que triga el servidor a generar la pàgina web, a més del temps que triga el visitant a descarregar la resposta del servidor. Un 'Temps mitjà de generació' més baix vol dir un lloc web més ràpid per als vostres visitants!",
|
45 |
+
"ColumnAverageTimeOnPage": "Temps mitjà a la pàgina",
|
46 |
"ColumnAverageTimeOnPageDocumentation": "La mitjana de temps que els visitants s'han passat en aquesta pàgina (només la pàgina no el lloc enter).",
|
47 |
"ColumnAvgTimeOnSite": "Temps mitjà per visita",
|
48 |
+
"ColumnAvgTimeOnSiteDocumentation": "La durada mitjana d'una visita.",
|
49 |
+
"ColumnBounceRate": "Ràtio de rebots",
|
50 |
"ColumnBounceRateDocumentation": "El percentatge de visites que només han vist una pàgina. Això significa, que el visitant ha marxat del lloc web directament per la pàgina d'entrada.",
|
51 |
"ColumnBounces": "Rebots",
|
52 |
+
"ColumnBouncesDocumentation": "El nombre de visites que han començat i acabat en aquesta pàgina. Això significa que la visita ha deixat el lloc web després de veure només aquesta pàgina.",
|
53 |
"ColumnConversionRate": "Tarifa de conversió",
|
54 |
"ColumnConversionRateDocumentation": "El percentatge de visites que han disparat una conversió d'objectiu.",
|
55 |
"ColumnDestinationPage": "Pàgina destí",
|
56 |
"ColumnEntrances": "Entrades",
|
57 |
+
"ColumnEntrancesDocumentation": "Nombre de visites que han començat en aquesta pàgina.",
|
58 |
"ColumnExitRate": "Taxa de sortida",
|
59 |
"ColumnExitRateDocumentation": "El percentatge de visites que han deixat el lloc web després de veure aquesta pàgina.",
|
60 |
"ColumnExits": "Sortides",
|
61 |
+
"ColumnExitsDocumentation": "Nombre de visites que acaben en aquesta pàgina.",
|
62 |
"ColumnGenerationTime": "Temps de generació",
|
63 |
+
"ColumnHits": "Accessos",
|
64 |
"ColumnKeyword": "Paraula clau",
|
65 |
"ColumnLabel": "Etiqueta",
|
66 |
"ColumnMaxActions": "Accions màximes en una visita",
|
67 |
"ColumnNbActions": "Accions",
|
68 |
+
"ColumnNbActionsDocumentation": "El nombre d'accions que han fet els vostres visitants. Les accions poden ser pàgines vistes, descàrregues o enllaços externs.",
|
69 |
"ColumnNbUniqVisitors": "Visitants únics",
|
70 |
+
"ColumnNbUniqVisitorsDocumentation": "El nombre de visitants no duplicats que arriben al vostre lloc web. Cada usuari només es compta una vegada, fins i tot si visiten el lloc web diverses vegades al dia.",
|
71 |
"ColumnNbUsers": "Usuaris",
|
72 |
+
"ColumnNbUsersDocumentation": "El nombre d'usuaris connectats al vostre lloc web. És el nombre d'usuaris actius únics que tenen definit un Identificador d'Usuari (mitjançant la funció de codi de seguiment \"Setuserid\").",
|
73 |
"ColumnNbVisits": "Visites",
|
74 |
+
"ColumnNbVisitsDocumentation": "Si un visitant arriba al vostre lloc web per primera vegada o si visita una pàgina més de 30 minuts després de la darrera visualització de la pàgina, es registrarà com a nova visita.",
|
75 |
"ColumnPageBounceRateDocumentation": "El percentatge de visites que han començat en aquesta pàgina i han deixat el lloc web directament.",
|
76 |
+
"ColumnPageGenerationTime": "Temps de generació de la pàgina",
|
77 |
"ColumnPageviews": "Visualitzacions de pàgina",
|
78 |
+
"ColumnPageviewsDocumentation": "El nombre de vegades que s'ha visitat aquesta pàgina.",
|
79 |
+
"ColumnPercentageVisits": "%% Visites",
|
80 |
"ColumnRevenue": "Ingressos",
|
81 |
+
"ColumnSumTimeOnSite": "Temps total al lloc web",
|
82 |
"ColumnSumVisitLength": "Temps total acumulat pels visitants (en segons)",
|
83 |
"ColumnTotalPageviews": "Total de pàgines vistes",
|
84 |
"ColumnUniqueEntrances": "Entrades úniques",
|
85 |
"ColumnUniqueExits": "Sortides úniques",
|
86 |
"ColumnUniquePageviews": "Visualitzacions de pàgina úniques",
|
87 |
+
"ColumnUniquePageviewsDocumentation": "El nombre de visites que incloïen aquesta pàgina. Si una pàgina s'ha vist múltiples vegades durant una visita, només es compta un cop.",
|
88 |
"ColumnValuePerVisit": "Valor per visita",
|
89 |
"ColumnViewedAfterSearch": "Clicat als resultats de cerca",
|
90 |
+
"ColumnViewedAfterSearchDocumentation": "El nombre de vegades que aquesta pàgina s'ha visitat després que el visitant hagi fet una cerca al vostre lloc web i hagi clicat en aquesta pàgina als resultats.",
|
91 |
+
"ColumnViewsWithGenerationTime": "Pàgines vistes amb temps de generació",
|
92 |
"ColumnVisitDuration": "Durada de la visita (en segons)",
|
93 |
"ColumnVisitsWithConversions": "Visites amb conversions",
|
94 |
+
"CompareDatesParamMustMatchComparePeriods": "La longitud del paràmetre de consulta %1$s ha de coincidir amb la longitud del paràmetre de consulta %2$s.",
|
95 |
+
"CompareTo": "Comparar amb:",
|
96 |
+
"ComparisonCardTooltip1": "'%1$s' sobre %2$s conté %3$s de totes les visites (%4$s de %5$s en total).",
|
97 |
+
"ComparisonCardTooltip2": "El recompte de visites és diferent per %1$s comparat amb %2$s sobre %3$s.",
|
98 |
+
"ComparisonRatioTooltip": "Aquest és un canvi %1$s comparat amb el segment '%2$s' sobre %3$s.",
|
99 |
+
"Comparisons": "Comparacions",
|
100 |
+
"ComputedMetricAverage": "Mitjana %1$s per %2$s",
|
101 |
+
"ComputedMetricAverageDocumentation": "Valor mitjà de \"%1$s\" per \"%2$s\".",
|
102 |
+
"ComputedMetricAverageShortDocumentation": "Valor mitjà de \"%1$s\".",
|
103 |
+
"ComputedMetricCountDocumentation": "El nombre de %s",
|
104 |
+
"ComputedMetricCountWithValue": "Entrades amb %s",
|
105 |
+
"ComputedMetricCountWithValueDocumentation": "El nombre d'entrades que tenen el valor definit per %s",
|
106 |
+
"ComputedMetricMax": "Màx %s",
|
107 |
+
"ComputedMetricMaxDocumentation": "El valor màxim de %s",
|
108 |
+
"ComputedMetricMin": "Mín %s",
|
109 |
+
"ComputedMetricMinDocumentation": "El valor mínim per a %s",
|
110 |
+
"ComputedMetricRate": "Taxa %s",
|
111 |
+
"ComputedMetricRateDocumentation": "La proporció de \"%1$s\" entre tots els \"%2$s\".",
|
112 |
+
"ComputedMetricRateShortDocumentation": "El percentatge de \"%1$s\".",
|
113 |
+
"ComputedMetricSum": "Total %s",
|
114 |
+
"ComputedMetricSumDocumentation": "El nombre total (sum) de %s",
|
115 |
+
"ComputedMetricUniqueCount": "%s únics",
|
116 |
+
"ComputedMetricUniqueCountDocumentation": "El nombre únic de %s",
|
117 |
+
"ConfigFileIsNotWritable": "El fitxer de configuració del Matomo %1$s no es pot modificar, alguns dels canvis que has fet no es guardaran. Si us plau %2$s canvia els permisos del fitxer de configuració per tal que es pugui modificar.",
|
118 |
+
"Confirm": "Confirmar",
|
119 |
+
"Continue": "Continua",
|
120 |
+
"ContinueToPiwik": "Ves cap al Matomo",
|
121 |
+
"Copy": "Copia",
|
122 |
+
"Create": "Crea",
|
123 |
"CreatedByUser": "Creat per %s",
|
124 |
+
"CreationDate": "Data de creació",
|
125 |
"CurrentMonth": "Mes actual",
|
126 |
"CurrentWeek": "Setmana actual",
|
127 |
"CurrentYear": "Any actual",
|
128 |
+
"CurrentlyUsingUnsecureHttp": "Actualment esteu utilitzant Matomo per HTTP no segur. Això pot fer que el vostre Matomo sigui vulnerable a les excepcions de seguretat. També és possible que infringeixi les lleis de privadesa, ja que algunes funcions, com ara les galetes de desactivació, no funcionaran. Us recomanem que configureu Matomo perquè utilitzi SSL (HTTPS) per millorar la seguretat.",
|
129 |
+
"Custom": "Personalitzat",
|
130 |
+
"Daily": "Diàriament",
|
131 |
"DailyReport": "diari",
|
132 |
"DailyReports": "Informe diari",
|
133 |
+
"DailySum": "suma diària",
|
134 |
+
"DashboardForASpecificWebsite": "Tauler per a un lloc web concret",
|
135 |
+
"DataForThisGraphHasBeenPurged": "Les dades per aquest gràfic tenen més de %s mesos d'antiguitat i s'han purgat.",
|
136 |
"DataForThisTagCloudHasBeenPurged": "Les dades per aquest nuvol d'etiquetes tenen més de %s mesos i s'han purgat.",
|
137 |
"Date": "Data",
|
138 |
"DateRange": "Rang de dates:",
|
139 |
"DateRangeFrom": "De",
|
140 |
"DateRangeFromTo": "De %1$s fins a %2$s",
|
141 |
+
"DateRangeInPeriodList": "Interval de dates",
|
142 |
"DateRangeTo": "Fins",
|
143 |
"DaysHours": "%1$s dies %2$s hores",
|
144 |
"DaysSinceFirstVisit": "Dies des de la primera visita",
|
150 |
"Description": "Descripció",
|
151 |
"Desktop": "Escriptori",
|
152 |
"Details": "Detalls",
|
153 |
+
"Disabled": "Desactivat",
|
154 |
"Discount": "Descompte",
|
155 |
"DisplaySimpleTable": "Mostrar una taula simple",
|
156 |
"DisplayTableWithGoalMetrics": "Mostrar una taula amb paràmetres globals",
|
158 |
"Documentation": "Documentació",
|
159 |
"Donate": "Donar",
|
160 |
"Done": "Fet",
|
161 |
+
"DoubleClickToChangePeriod": "Feu doble clic per aplicar aquest període.",
|
162 |
"Download": "Descàrrega",
|
163 |
+
"DownloadFail_FileExists": "El fitxer %s ja existeix!",
|
164 |
+
"DownloadFail_FileExistsContinue": "Provant de continuar la descàrrega de %s, però ja existeix un fitxer completament descarregat!",
|
165 |
"DownloadFail_HttpRequestFail": "No s'ha pogut descarregar el fitxer! Alguna cosa no ha anat bé amb el lloc web d'on esteu descarregant. Podeu provar-ho més tard o obtenir el fitxer per vosaltres mateixos.",
|
166 |
"DownloadFullVersion": "%1$sDescarrega%2$s la versió completa! Ves a %3$s",
|
167 |
"DownloadPleaseRemoveExisting": "Si voleu que es sobreescrigui, elimineu el fitxer existent.",
|
172 |
"Edit": "Edita",
|
173 |
"EncryptedSmtpTransport": "Entreu el xifrat de la capa de transport requerit per el vostre servidor SMTP.",
|
174 |
"Error": "Error",
|
175 |
+
"ErrorRequest": "Vaja... hi ha hagut un problema durant la sol·licitud. Potser el servidor ha tingut un problema temporal, o potser heu sol·licitat un informe amb massa dades. Siusplau torna-ho a provar. Si aquest error es produeix repetidament, %1$scontacteu amb el vostre administrador de Matomo%2$s per obtenir ajuda.",
|
176 |
+
"ErrorRequestFaqLink": "Consulteu els passos per resoldre aquest problema a les FAQ.",
|
177 |
+
"ErrorTryAgain": "Error. Siusplau, intenta-ho més tard.",
|
178 |
"Errors": "Errors",
|
179 |
"EvolutionOverPeriod": "Evolució del període",
|
180 |
+
"EvolutionSummaryGeneric": "%1$s en %2$s comparat amb %3$s en %4$s. Evolució: %5$s",
|
181 |
+
"ExceptionCapabilityAccessWebsite": "No es pot accedir a aquest recurs ja que necessita la capacitat %1$s per al lloc web id=%2$d.",
|
182 |
+
"ExceptionCheckUserHasSuperUserAccessOrIsTheUser": "L'usuari ha de ser o bé SuperUsuari o bé l'usuari %s propiament.",
|
183 |
+
"ExceptionConfigurationFileExistsButNotReadable": "L'arxiu de configuració %s sembla que existeix però Matomo no el pot llegir.",
|
184 |
"ExceptionConfigurationFileNotFound": "El fitxer de configuració {%s} no s'ha trobat.",
|
185 |
+
"ExceptionConfigurationFilePleaseCheckReadableByUser": "Siusplau comprova que %1$s es pot llegir per part de l'usuari '%2$s'.",
|
186 |
+
"ExceptionContactSupportGeneric": "Si encara teniu aquest problema siusplau %1$sposa't en contacte amb el teu administrador Matomo%2$s per obtenir ajuda.",
|
187 |
+
"ExceptionDatabaseAccess": "Accés a la base de dades denegat",
|
188 |
+
"ExceptionDatabaseUnavailable": "El servidor MySQL ha caigut",
|
189 |
+
"ExceptionDatabaseVersion": "La teva %1$s versió és %2$s però el Matomo necessita com a mínim %3$s.",
|
190 |
+
"ExceptionDatabaseVersionNewerThanCodebase": "La vostra instal·lació de Matomo està executant la versió antiga %1$s i hem detectat que la vostra base de dades Matomo ja s'ha actualitzat a la versió més recent %2$s.",
|
191 |
+
"ExceptionDatabaseVersionNewerThanCodebaseWait": "Potser els vostres administradors de Matomo estan acabant el procés d'actualització. Si us plau, torna-ho a provar d'aquí a uns minuts.",
|
192 |
+
"ExceptionDirectoryToDelete": "Directori a esborrar: %s",
|
193 |
"ExceptionFileIntegrity": "Ha fallat la verificació de integritat: %s",
|
194 |
+
"ExceptionFileToDelete": "Arxiu per esborrar: %s",
|
195 |
"ExceptionFilesizeMismatch": "Mida de fitxer incohoerent: %1$s (mida esperada: %2$s, real: %3$s)",
|
196 |
"ExceptionIncompatibleClientServerVersions": "El vostre client %1$s té la versió %2$s que és incompatbile amb la versió de servidor %3$s.",
|
197 |
"ExceptionInvalidAggregateReportsFormat": "El format de informes agregats '%1$s' no és vàlid. Proveu-ne algun dels següents en el seu lloc: %2$s.",
|
198 |
+
"ExceptionInvalidArchiveTimeToLive": "El temps límit per fer l'arxivat avui ha de ser més gran que zero segons",
|
199 |
+
"ExceptionInvalidDateBeforeFirstWebsite": "La data '%1$s' és una data abans que el primer lloc web estigués en línia. Prova una data posterior a %2$s (marca de temps %3$s).",
|
200 |
"ExceptionInvalidDateFormat": "El format de data ha de ser: %1$s o una altra paraula clau suportada per la funció %2$s (vegeu %3$s per més informació)",
|
201 |
"ExceptionInvalidDateRange": "La data '%1$s' no és un rang correcte de data. Hauria de tenir el format següent: %2$s.",
|
202 |
+
"ExceptionInvalidPeriod": "El període '%1$s' no està suportat. Proveu-ne algun dels següents en el seu lloc: %2$s",
|
203 |
"ExceptionInvalidRendererFormat": "El format generador '%1$s' no és vàlid. Proveu-ne un dels següents en el seu lloc: %2$s.",
|
204 |
"ExceptionInvalidReportRendererFormat": "El format de l'informe '%1$s' no és vàlid. Proveu-ne un dels següent en el seu lloc: %2$s.",
|
205 |
"ExceptionInvalidStaticGraphType": "El gràfic estàtic tipus '%1$s' no és vàlid. Proveu-ne un dels següents en el seu lloc: %2$s.",
|
208 |
"ExceptionMethodNotFound": "El mètode '%1$s' no existeix o no està disponible en el mòdul '%2$s'.",
|
209 |
"ExceptionMissingFile": "Falta fitxer: %s",
|
210 |
"ExceptionNonceMismatch": "No s'ha pogut verificar el token del formulari.",
|
211 |
+
"ExceptionNotSupportedBrowserText": "Per problemes de seguretat, el vostre navegador no és compatible. Si us plau, actualitzeu a una versió més nova.",
|
212 |
+
"ExceptionNotSupportedBrowserTitle": "El vostre navegador no és compatible.",
|
213 |
+
"ExceptionPrivilege": "No podeu accedir a aquest recurs perquè requereix un accés de %s.",
|
214 |
+
"ExceptionPrivilegeAccessWebsite": "No podeu accedir a aquest recurs perquè requereix accés a %1$s per a l'identificador del lloc web = %2$d.",
|
215 |
+
"ExceptionPrivilegeAtLeastOneWebsite": "No podeu accedir a aquest recurs perquè requereix accés a %s com a mínim per a un lloc web.",
|
216 |
+
"ExceptionReportNotEnabled": "L'informe sol·licitat no està disponible. Això vol dir que normalment el connector que defineix l'informe està desactivat o no teniu prou permisos per accedir a aquest informe.",
|
217 |
"ExceptionReportNotFound": "El informe que s'ha seleccionat no existeix.",
|
218 |
"ExceptionUnableToStartSession": "No s'ha pogut començar la sessió.",
|
219 |
"ExceptionUndeletableFile": "No s'ha pogut esborrar %s",
|
220 |
+
"ExceptionUnexpectedDirectory": "S'han trobat directoris al teu Matomo, però no els esperàvem.",
|
221 |
+
"ExceptionUnexpectedDirectoryPleaseDelete": "Si us plau, suprimiu aquests directoris per evitar errors.",
|
222 |
+
"ExceptionUnexpectedFile": "S'han trobat fitxers al teu Matomo, però no els esperàvem.",
|
223 |
+
"ExceptionUnexpectedFilePleaseDelete": "Si us plau, suprimiu aquests fitxers per evitar errors.",
|
224 |
"ExceptionUnreadableFileDisabledMethod": "El fitxer de configuració {%1$s} no s'ha pogut llegir. El vostre host pot tenir deshabilitat %2$s.",
|
225 |
+
"ExceptionWidgetNotEnabled": "El giny sol·licitat no està habilitat. Això vol dir que normalment el connector que defineix el giny està desactivat o no teniu prou permisos per accedir a aquest giny.",
|
226 |
+
"ExceptionWidgetNotFound": "El giny sol·licitat no existeix.",
|
227 |
+
"ExpandDataTableFooter": "Canviar la visualització o configurar l'informe",
|
228 |
"Export": "Exporta",
|
229 |
"ExportAsImage": "Exportar com a imatge",
|
230 |
"ExportThisReport": "Guardar aquestes dades en altres formats",
|
231 |
"Faq": "PMF",
|
232 |
+
"FileIntegrityWarning": "La comprovació d'integritat del fitxer ha fallat i ha informat d'alguns errors. Hauríeu de solucionar aquest problema i, a continuació, actualitzar aquesta pàgina fins que no mostri cap error.",
|
233 |
+
"FileIntegrityWarningReupload": "Els errors següents poden ser deguts a una càrrega parcial o errònia dels fitxers Matomo.",
|
234 |
+
"FileIntegrityWarningReuploadBis": "Intenta tornar a carregar tots els fitxers Matomo en mode BINARI.",
|
235 |
"First": "Primer",
|
236 |
+
"Flatten": "Allisar",
|
237 |
"ForExampleShort": "p.ex.",
|
238 |
+
"ForceSSLRecommended": "Recomanem utilitzar Matomo només per connexions SSL segures. Per evitar l'accés insegur a través d'http, afegiu %1$s a la secció %2$s del vostre fitxer config\/config.ini.php de Matomo.",
|
239 |
+
"ForcedSSL": "Connexió SSL forçosa",
|
240 |
"Forums": "Fòrums",
|
241 |
"FromReferrer": "de",
|
242 |
"GeneralInformation": "Informació General",
|
243 |
"GeneralSettings": "Configuració general",
|
244 |
+
"Generic": "Genèric",
|
245 |
"GetStarted": "Comenceu",
|
246 |
+
"GiveUsYourFeedback": "Envia'ns els teus comentaris!",
|
247 |
"GoTo": "Anar a %s",
|
248 |
+
"GoTo2": "Anar a",
|
249 |
"Goal": "Objectiu",
|
250 |
"GraphHelp": "Més informació sobre mostrar gràfiques al Matomo.",
|
251 |
"HelloUser": "Hola, %s!",
|
252 |
"Help": "Ajuda",
|
253 |
+
"HelpReport": "Feu clic per mostrar informació d'ajuda sobre aquest informe",
|
254 |
+
"HelpResources": "Recursos d'ajuda",
|
255 |
+
"HelpTranslatePiwik": "Potser us agradaria %1$sajudar-nos a millorar les traduccions de Matomo%2$s?",
|
256 |
"Hide": "amaga",
|
257 |
"HoursMinutes": "%1$s hores %2$s min",
|
258 |
"IP": "IP",
|
259 |
"Id": "Id",
|
260 |
+
"IfArchivingIsFastYouCanSetupCronRunMoreOften": "Suposant que l'arxivat és ràpid per a la vostra configuració, podeu configurar el crontab perquè s'executi amb més freqüència.",
|
261 |
+
"IncompletePeriod": "Període incomplet",
|
262 |
"InfoFor": "Informació per %s",
|
263 |
"Installed": "Instal·lat",
|
264 |
"InvalidDateRange": "Interval de dates no vàlid, si us plau proveu-ho de nou",
|
265 |
"InvalidResponse": "Les dades rebudes són invàlides.",
|
266 |
"JsTrackingTag": "Etiqueta de seguiment JavaScript",
|
267 |
+
"KpiMetric": "Mètrica KPI",
|
268 |
"Language": "Idioma",
|
269 |
+
"Languages": "Idiomes",
|
270 |
"LastDays": "Últims %s dies (incloent avui)",
|
271 |
"LastDaysShort": "Últims %s dies",
|
272 |
+
"LearnMore": "%1$ssaber-ne més%2$s",
|
273 |
+
"Live": "En directe",
|
274 |
"Loading": "Carregant…",
|
275 |
"LoadingData": "Les dades s'estan carregant…",
|
276 |
"LoadingPopover": "Carregant %s...",
|
278 |
"Locale": "ca_ES.UTF-8",
|
279 |
"Logout": "Surt",
|
280 |
"MainMetrics": "Mètriques principals",
|
281 |
+
"Matches": "Coincidències",
|
282 |
+
"MatomoIsACollaborativeProjectYouCanContributeAndDonateNextRelease": "%1$sMatomo%2$s, abans conegut com Piwik, és un projecte col·laboratiu creat pels membres de l'equip de %7$sMatomo%8$s així com per molts altres col·laboradors d'arreu del món. <br> Si ets fan de Matomo, pots ajudar: esbrina %3$sCom participar a Matomo%4$s, o %5$sdona ara%6$s per ajudar a finançar el proper gran llançament de Matomo !",
|
283 |
+
"MaximumNumberOfPeriodsComparedIs": "El nombre màxim de períodes que es poden comparar simultàniament és %s.",
|
284 |
+
"MaximumNumberOfSegmentsComparedIs": "El nombre màxim de segments que es poden comparar simultàniament és %s.",
|
285 |
+
"Measurable": "Mesurable",
|
286 |
+
"MeasurableId": "ID Mesurable",
|
287 |
+
"Measurables": "Mesurables",
|
288 |
+
"MediumToHighTrafficItIsRecommendedTo": "Per llocs de mig i alt transit, recomanem processar informes per avui com a molt cada mitja hora (%1$s segons) o cada hora (%2$s segons).",
|
289 |
"Metadata": "Metadata",
|
290 |
"Metric": "Mètrica",
|
291 |
"MetricToPlot": "Mètrica a mostrar",
|
304 |
"NUsers": "%s usuaris",
|
305 |
"NVisits": "%s visites",
|
306 |
"Name": "Nom",
|
307 |
+
"NameShownInTheSenderColumn": "El nom que es mostra a la columna del remitent",
|
308 |
"NbActions": "Número d'accions",
|
309 |
+
"NbInteractions": "Nombre d'interaccions",
|
310 |
"NbSearches": "Nombre de cerques internes",
|
311 |
"NeedMoreHelp": "Necessiteu més ajuda?",
|
312 |
"Never": "Mai",
|
313 |
+
"New": "Nou",
|
314 |
"NewReportsWillBeProcessedByCron": "Quan l'arxivat del Matomo no es dispara per el navegador, els nous informes es processaran per el crontab.",
|
315 |
"NewUpdatePiwikX": "Nova actualització: Matomo %s",
|
316 |
"NewVisitor": "Nova visita",
|
321 |
"NoDataForTagCloud": "No hi ha dades...",
|
322 |
"NotDefined": "%s sense definir",
|
323 |
"NotInstalled": "No instal·lat",
|
324 |
+
"NotPossibleWithoutHttps": "Atenció: fer això sense haver configurat un certificat SSL per utilitzar HTTPS rebentarà Matomo.",
|
325 |
"NotRecommended": "no recomanat",
|
326 |
"NotValid": "%s no és vàlid",
|
327 |
"Note": "Nota",
|
340 |
"OperationEndsWith": "Acaba amb",
|
341 |
"OperationEquals": "Es igual",
|
342 |
"OperationGreaterThan": "Major que",
|
343 |
+
"OperationIs": "És",
|
344 |
+
"OperationIsNot": "No és",
|
345 |
"OperationLessThan": "Menor que",
|
346 |
"OperationNotEquals": "Diferent",
|
347 |
"OperationStartsWith": "Comença amb",
|
348 |
"OptionalSmtpPort": "Opcional. Per defecte té el valor 25 per no xifrat i TLS SMTP, i 465 per SSL SMTP.",
|
349 |
"Options": "Opcions",
|
350 |
+
"Or": "o",
|
351 |
"OrCancel": "o %1$s cancel·la %2$s",
|
352 |
"Others": "Altres",
|
353 |
"Outlink": "Enllaç extern",
|
356 |
"OverlayRowActionTooltipTitle": "Obre una pàgina superposada",
|
357 |
"Overview": "Resum",
|
358 |
"Pages": "Pàgines",
|
359 |
+
"Pagination": "%1$s–%2$s de %3$s",
|
360 |
+
"PaginationWithoutTotal": "%1$s–%2$s",
|
361 |
+
"ParameterMustIntegerBetween": "El paràmetre %1$s ha de ser un enter entre %2$s i %3$s.",
|
362 |
"Password": "Contrasenya",
|
363 |
"Period": "Període",
|
364 |
"Piechart": "Gràfic de sectors",
|
365 |
+
"PiwikCannotBeUpgradedBecausePhpIsTooOld": "Matomo no es pot actualitzar a la darrera versió principal perquè la vostra versió de PHP és massa antiga.",
|
366 |
+
"PiwikXIsAvailablePleaseNotifyPiwikAdmin": "%1$s està disponible. Si us plau, aviseu a %2$sl'administrador Matomo%3$s.",
|
367 |
+
"PiwikXIsAvailablePleaseUpdateNow": "Hi ha una nova versió del Matomo, %1$s, disponible! %2$s Si us plau, actualitzeu ara!%3$s (%4$s Mostra els canvis%5$s).",
|
368 |
"PleaseContactYourPiwikAdministrator": "Si us plau, contacteu amb el vostre administrador del Matomo.",
|
369 |
+
"PleaseSpecifyValue": "Si us plau especifiqueu el valor per a '%s'.",
|
370 |
+
"PleaseTryAgain": "Siusplau torna-ho a provar",
|
371 |
"PleaseUpdatePiwik": "Si us plau actualitzeu el Matomo",
|
372 |
+
"PleaseUpgradeYourPhpVersionSoYourPiwikDataStaysSecure": "Si us plau, actualitzeu la vostra versió de PHP com a mínim a PHP %s perquè les vostres dades d'anàlisi de Matomo estiguin segures.",
|
373 |
"Plugin": "Connector",
|
374 |
"Plugins": "Connectors",
|
375 |
"PoweredBy": "Funcionant amb",
|
376 |
"Previous": "Anterior",
|
377 |
"PreviousDays": "%s dies anteriors (sense incloure avui)",
|
378 |
"PreviousDaysShort": "Anteriors %s dies",
|
379 |
+
"PreviousPeriod": "Període anterior",
|
380 |
+
"PreviousYear": "L'any passat",
|
381 |
"Price": "Preu",
|
382 |
+
"Print": "Imprimir",
|
383 |
"ProductConversionRate": "Taxa de conversió del producte",
|
384 |
"ProductRevenue": "Ingressos de productes",
|
385 |
+
"Profiles": "Perfils",
|
386 |
"PurchasedProducts": "Productes comprats",
|
387 |
"Quantity": "Quantitat",
|
388 |
"RangeReports": "Rang de data personalitzat",
|
389 |
+
"ReadThisToLearnMore": "%1$sLlegeix això per obtenir més informació.%2$s",
|
390 |
+
"RealTime": "En temps real",
|
391 |
+
"RearchiveTimeIntervalOnlyForTodayReports": "Això només afecta els informes d'avui (o qualsevol altre interval de dates que inclogui el dia d'avui)",
|
392 |
+
"Reasons": "Raons",
|
393 |
"Recommended": "Recomanat",
|
394 |
"RecordsToPlot": "Entrades a mostrar",
|
395 |
"Refresh": "Actualitza",
|
399 |
"Remove": "Elimina",
|
400 |
"Report": "Informe",
|
401 |
"ReportGeneratedFrom": "Aquest informe s'ha generat fent servir dades de %s.",
|
402 |
+
"ReportRatioTooltip": "'%1$s' representa %2$s de %3$s %4$s al segment %5$s amb %6$s.",
|
403 |
"Reports": "Informes",
|
404 |
+
"ReportsContainingTodayWillBeProcessedAtMostEvery": "Arxiva els informes com a màxim cada X segons",
|
405 |
"ReportsWillBeProcessedAtMostEveryHour": "El informes per tant es processaran com a molt cada hora.",
|
406 |
"RequestTimedOut": "Una petició a %s ha caducat. Proveu-ho de nou.",
|
407 |
"Required": "%s requerit",
|
408 |
+
"Required2": "Obligatori",
|
409 |
"ReturningVisitor": "Visita que retorna",
|
410 |
"ReturningVisitorAllVisits": "Veure totes les visites",
|
411 |
"RowEvolutionRowActionTooltip": "Observeu com les mètriques d'aquesta fila han canviat durant el pas del temps",
|
416 |
"SaveImageOnYourComputer": "Per guardar la imatge al vostre ordinador, feu click amb el botó dret sobre la imatge i trieu \"Guardar la imatge com..\"",
|
417 |
"Search": "Cerca",
|
418 |
"SearchNoResults": "Sense resultats",
|
419 |
+
"SecondsSinceFirstVisit": "En segons des de la primera visita",
|
420 |
+
"SecondsSinceLastEcommerceOrder": "Segons des de l'última comanda de comerç electrònic",
|
421 |
+
"SecondsSinceLastVisit": "Segons des de la darrera visita",
|
422 |
"Security": "Seguretat",
|
423 |
"SeeAll": "veure-ho tot",
|
424 |
"SeeTheOfficialDocumentationForMoreInformation": "Vegeu la %1$sinformació oficial%2$s per més informació.",
|
425 |
+
"SeeThisFaq": "Vegeu%1$saquest FAQ%2$s.",
|
426 |
"Segment": "Segment",
|
427 |
+
"SelectYesIfYouWantToSendEmailsViaServer": "Trieu \"Si\" per si voleu o heu d'enviar el correu a través de un servidor enlloc de fer-ho a través de la funció mail local",
|
428 |
"Settings": "Tauler de control",
|
429 |
"Shipping": "Enviament",
|
430 |
"Show": "mostra",
|
431 |
"SingleWebsitesDashboard": "Tauler per un sol lloc web",
|
432 |
"SmallTrafficYouCanLeaveDefault": "Per llocs amb poc transit, pots deixar el valor per defecte de %s segons i accedir als informes en temps real.",
|
433 |
"SmtpEncryption": "encriptació SMTP",
|
434 |
+
"SmtpFromAddress": "SMTP de l'adreça",
|
435 |
+
"SmtpFromEmailHelp": "El valor predeterminat és noreply@{DOMAIN}, on {DOMAIN} se substituirà pel vostre domini Matomo \"%1$s\".<br>Si l'enviament de correus no us funciona, potser haureu de configurar aquesta adreça perquè coincideixi amb el vostre nom d'usuari SMTP.",
|
436 |
+
"SmtpFromName": "SMTP del nom",
|
437 |
"SmtpPassword": "contrasenya SMTP",
|
438 |
"SmtpPort": "Port SMTP",
|
439 |
"SmtpServerAddress": "adreça del servidor SMTP",
|
440 |
"SmtpUsername": "usuari SMTP",
|
441 |
+
"Source": "Font",
|
442 |
+
"StatisticsAreNotRecorded": "El seguiment de visitants de Matomo està desactivat actualment! Torneu a activar el seguiment establint record_statistics = 1 al fitxer config\/config.ini.php.",
|
443 |
"Subtotal": "Subtotal",
|
444 |
"Summary": "Resum",
|
445 |
"Table": "Taula",
|
446 |
"TagCloud": "Núvol d'etiquetes",
|
447 |
"Tax": "Impostos",
|
448 |
+
"ThankYouForUsingMatomo": "Gràcies per utilitzar Matomo",
|
449 |
+
"TheMatomoTeam": "L'equip Matomo",
|
450 |
+
"TimeAgo": "fa %s",
|
451 |
+
"TimeFormat": "Format horari",
|
452 |
"TimeOnPage": "Temps a la pàgina",
|
453 |
+
"ToDeleteAllDirectoriesRunThisCommand": "Per eliminar tots aquests directoris alhora, podeu executar aquesta ordre:",
|
454 |
+
"ToDeleteAllFilesRunThisCommand": "Per eliminar tots aquests fitxers alhora, podeu executar aquesta ordre:",
|
455 |
"Total": "Total",
|
456 |
+
"TotalRatioTooltip": "Això és %1$s de tots els %2$s %3$s a %4$s.",
|
457 |
"TotalRevenue": "Total Ingressos",
|
458 |
+
"TotalVisitsPageviewsActionsRevenue": "(Total: %1$s visites, %2$s pàgines vistes, %3$s accions, %4$s ingressos)",
|
459 |
+
"Totals": "Totals",
|
460 |
"TrackingScopeAction": "Acció",
|
461 |
"TrackingScopePage": "Pàgina",
|
462 |
"TrackingScopeVisit": "Visita",
|
465 |
"TranslatorName": "Isaac Sánchez Barrera, Joan Juvanteny",
|
466 |
"UniquePurchases": "Compres úniques",
|
467 |
"Unknown": "Desconegut",
|
468 |
+
"Update": "Actualització",
|
469 |
"Upload": "Càrrega",
|
470 |
"UsePlusMinusIconsDocumentation": "Fes servir les icones de més i menys a l'esquerra per navegar.",
|
471 |
"UseSMTPServerForEmail": "Fer servir un servidor SMTP per el correu",
|
472 |
+
"UseSSLInstall": "Recomanem utilitzar Matomo només amb connexions SSL segures. Si us plau, %1$sfeu clic aquí i continueu el procés d'instal·lació mitjançant SSL%2$s.",
|
473 |
"UserId": "Identificador Usuari",
|
474 |
+
"UserIds": "Identificadors d'usuari",
|
475 |
"Username": "Usuari",
|
476 |
"VBarGraph": "Gràfic de barres",
|
477 |
+
"ValidatorErrorCharacterTooLong": "El valor conté \"%1$s\" caràcters però hauria de contenir com a màxim %2$s caràcters.",
|
478 |
+
"ValidatorErrorCharacterTooShort": "El valor conté \"%1$s\" caràcters però hauria de contenir almenys %2$s caràcters.",
|
479 |
+
"ValidatorErrorEmptyValue": "Cal proporcionar un valor.",
|
480 |
+
"ValidatorErrorInvalidDateTimeFormat": "La data \"%1$s\" no té el format correcte, feu servir %2$s",
|
481 |
+
"ValidatorErrorNoValidRegex": "El valor \"%s\" no és una expressió regular vàlida.",
|
482 |
+
"ValidatorErrorNotANumber": "El valor no és una xifra.",
|
483 |
+
"ValidatorErrorNotEmailLike": "El valor \"%s\" no sembla un correu electrònic vàlid.",
|
484 |
+
"ValidatorErrorNotUrlLike": "El valor \"%s\" no sembla una URL.",
|
485 |
+
"ValidatorErrorNumberTooHigh": "El valor \"%1$s\" és massa alt. El valor ha de ser com a màxim %2$s",
|
486 |
+
"ValidatorErrorNumberTooLow": "El valor \"%1$s\" és massa baix. El valor ha de ser com a mínim %2$s.",
|
487 |
+
"ValidatorErrorXNotWhitelisted": "El valor \"%1$s\" no està permès, utilitzeu-ne un de: %2$s.",
|
488 |
"Value": "Valor",
|
489 |
"View": "Vista",
|
490 |
+
"ViewAccessRequired": "El token_auth utilitzat té massa privilegis per utilitzar-lo en un URL de sol·licitud que no sigui API. Utilitzeu una contrasenya específica de l'aplicació per a un usuari que només tingui accés de visualització.",
|
491 |
+
"ViewDocumentationFor": "Consulta la documentació de %1$s",
|
492 |
"Visit": "Visita",
|
493 |
"VisitConvertedGoal": "La visita ha convertit al menys un objectiu",
|
494 |
"VisitConvertedGoalId": "La visita ha convertit un id d'objectiu especific",
|
495 |
"VisitConvertedNGoals": "La visita ha convertit %s objectius",
|
496 |
"VisitDuration": "Temps mig de visita (en segons)",
|
497 |
+
"VisitId": "ID de la visita",
|
498 |
"VisitType": "Tipus de visitant",
|
499 |
"VisitTypeExample": "Per exemple, per seleccionar tots els visitants que han retornat al lloc web, incloent els que han comprat alguna cosa en anteriors visites, la petició de l'API tindria %s",
|
500 |
+
"VisitTypes": "Tipus de visita",
|
501 |
"Visitor": "Visita",
|
502 |
+
"VisitorFingerprint": "Empremta digital",
|
503 |
"VisitorID": "ID del visitant",
|
504 |
"VisitorIP": "Ip del visitant",
|
505 |
+
"VisitorIPs": "IP del visitant",
|
506 |
"VisitorSettings": "Configuració del visitant",
|
507 |
"Visitors": "Visitants",
|
508 |
"VisitsWith": "Visites amb %s",
|
509 |
+
"VisualizationDoesNotSupportComparison": "Aquesta visualització no admet la comparació de segments\/períodes.",
|
510 |
"Warning": "Avís",
|
511 |
+
"WarningDebugOnDemandEnabled": "El mode de seguiment %1$s està habilitat. Per motius de seguretat només s'ha d'activar durant un període de temps curt. Per desactivar-lo, defineix%2$s com %3$s a %4$s",
|
512 |
+
"WarningDevelopmentModeOnButNotGitInstalled": "Actualment esteu utilitzant Matomo en mode de desenvolupament, però no s'ha instal·lat mitjançant git. No es recomana utilitzar Matomo en mode de desenvolupament en un entorn de producció.",
|
513 |
"WarningFileIntegrityNoManifest": "La verificació de la integritat dels fitxers no s'ha pogut fer perquè falta el manifest.inc.php.",
|
514 |
+
"WarningFileIntegrityNoManifestDeployingFromGit": "Si esteu desplegant Matomo des de Git, aquest missatge és normal.",
|
515 |
+
"WarningFileIntegrityNoMd5file": "La verificació de la integritat dels fitxers no s'ha pogut completar perquè falta la funció md5_file().",
|
516 |
"WarningPasswordStored": "%1$sAlerta:%2$s Aquesta contrasenya es guardarà en un fitxer de configuració visible on tothom pot accedir.",
|
517 |
+
"WarningPhpVersionXIsTooOld": "La versió de PHP %s que esteu utilitzant ha arribat al final de la seva vida útil (EOL). Us demanem vivament que actualitzeu a una versió actual, ja que l'ús d'aquesta versió us pot exposar a vulnerabilitats de seguretat i errors que s'han corregit en versions més recents de PHP.",
|
518 |
+
"WarningPiwikWillStopSupportingPHPVersion": "Matomo deixarà de suportar PHP %1$s a la propera versió principal. Actualitzeu el vostre PHP com a mínim a PHP %2$s, abans que sigui massa tard!",
|
519 |
+
"Warnings": "Avisos-",
|
520 |
"Website": "Lloc web",
|
521 |
"Weekly": "Setmanalment",
|
522 |
"WeeklyReport": "setmanal",
|
524 |
"WellDone": "Ben fet!",
|
525 |
"Widget": "Giny",
|
526 |
"Widgets": "Ginys",
|
527 |
+
"XComparedToY": "%1$s comparat amb %2$s",
|
528 |
+
"XFromY": "%1$s de %2$s",
|
529 |
"YearlyReport": "anual",
|
530 |
"YearlyReports": "Informe anual",
|
531 |
"YearsDays": "%1$s anys %2$s dies",
|
532 |
"Yes": "Sí",
|
533 |
"YouAreCurrentlyUsing": "Ara mateix estàs fent servir el Matomo %s.",
|
534 |
+
"YouAreViewingDemoMessage": "Esteu veient la demostració de %1$sMatomo%2$s",
|
535 |
"YouMustBeLoggedIn": "Has d'entrar per accedir a aquesta funcionalitat.",
|
536 |
+
"YouMustUpgradePhpVersionToReceiveLatestPiwik": "Heu d'actualitzar la vostra versió de PHP per rebre l'última actualització de Matomo.",
|
537 |
+
"YourChangesHaveBeenSaved": "Els vostres canvis s'han desat.",
|
538 |
+
"YourSessionHasExpired": "La vostra sessió ha caducat per inactivitat. Inicieu sessió per continuar."
|
539 |
},
|
540 |
"Mobile": {
|
541 |
"AboutPiwikMobile": "Sobre el Matomo al mòbil",
|
547 |
"Advanced": "Avançat",
|
548 |
"AnonymousAccess": "Accès anònim",
|
549 |
"AnonymousTracking": "Rastreig anònim",
|
550 |
+
"AskForAnonymousTrackingPermission": "Quan està activat, Matomo Mobile enviarà dades d'ús anònimes a matomo.org. La intenció és utilitzar aquestes dades per ajudar els desenvolupadors de Matomo Mobile a entendre millor com s'utilitza l'aplicació. La informació enviada és: menús i paràmetres en què s'ha fet clic, nom i versió del sistema operatiu, qualsevol error que es mostri a Matomo Mobile. NO farem un seguiment de cap de les vostres dades d'anàlisi. Aquestes dades anònimes mai es faran públiques. Podeu desactivar\/activar el seguiment anònim a Configuració en qualsevol moment.",
|
551 |
"ChooseHttpTimeout": "Seleccioneu el temps d'expiració HTTP",
|
552 |
"ChooseMetric": "Trieu una mètrica",
|
553 |
"ChooseReport": "Trieu un informe",
|
556 |
"DefaultReportDate": "Data de l'informe",
|
557 |
"EmailUs": "Envia'ns un email",
|
558 |
"EnableGraphsLabel": "Mostra gràfiques",
|
559 |
+
"EnterAuthCode": "Introduïu el codi d'autenticació",
|
560 |
+
"EnterAuthCodeExplanation": "Sembla que esteu utilitzant l'autenticació de dos factors. Introduïu el codi de sis dígits per iniciar sessió al vostre compte.",
|
561 |
+
"EnterCorrectAuthCode": "Introduïu el codi d'autenticació correcte",
|
562 |
"EvolutionGraph": "Gràfic històric",
|
563 |
+
"ExceptionNoViewAccess": "Si us plau, comproveu el vostre nom d'usuari i contrasenya i assegureu-vos que teniu accés %s a almenys un lloc web.",
|
564 |
"HelpUsToImprovePiwikMobile": "T'agradaria activar el rastreig anònim de l'us del Matomo en el teu mòbil?",
|
565 |
+
"HowtoDeleteAnAccount": "Premeu llargament per eliminar un compte.",
|
566 |
"HowtoDeleteAnAccountOniOS": "Pasa de l'esquerra cap a la dreta per eliminar un compte",
|
567 |
+
"HowtoExitAndroid": "Si us plau, fes clic a TORNAR per sortir",
|
568 |
+
"HowtoLoginAnonymous": "Deixeu el nom d'usuari i la contrasenya buits per a l'inici de sessió anònim",
|
569 |
+
"HttpIsNotSecureWarning": "El vostre testimoni d'autorització de Matomo (token_auth) s'envia en text clar si feu servir \"HTTP\". Per aquest motiu recomanem HTTPS per al transport segur de dades a través d'Internet. Voleu continuar?",
|
570 |
"HttpTimeout": "Temps d'expiració HTTP",
|
571 |
"IgnoreSslError": "Ignorar error SSL",
|
572 |
+
"IncompatiblePiwikVersion": "La versió de Matomo que utilitzeu és incompatible amb Matomo Mobile 2. Actualitzeu la instal·lació de Matomo i torneu-ho a provar o instal·leu Matomo Mobile 1.",
|
573 |
"LastUpdated": "Ultima actualització: %s",
|
574 |
"LoadingReport": "Carregant %s",
|
575 |
"LoginCredentials": "Credencials",
|
576 |
+
"LoginToPiwikToChangeSettings": "Inicieu sessió al vostre servidor de Matomo per crear i actualitzar llocs web, usuaris o per canviar la configuració general com ara \"Informe per carregar per defecte\".",
|
577 |
"LoginUseHttps": "Utilitza https",
|
578 |
+
"MatomoMarketplace": "Mercat Matomo",
|
579 |
+
"MatomoMobile": "Aplicació mòbil Matomo",
|
580 |
"MultiChartLabel": "Mostra minigràfics",
|
581 |
"NavigationBack": "Enrere",
|
582 |
"NetworkError": "Error de xarxa",
|
583 |
+
"NetworkErrorWithStatusCode": "S'ha produït un error \"%1$s\". La sol·licitud ha retornat l'estat \"%2$s\". L'URL era \"%3$s\". Comproveu l'URL introduït i els registres d'errors d'aquest servidor per obtenir més informació sobre l'error i com resoldre'l.",
|
584 |
"NetworkErrorWithStatusCodeShort": "Error de xarxa %s",
|
585 |
"NetworkNotReachable": "La xarxa no és accessible",
|
586 |
+
"NoAccountIsSelected": "Heu de seleccionar un compte. Afegiu un compte nou si no n'heu configurat cap.",
|
587 |
"NoDataShort": "Sense óinformaci",
|
588 |
"NoPiwikAccount": "No teniu un compte de Matomo?",
|
589 |
"NoReportsShort": "Sense informes",
|
591 |
"NoVisitorsShort": "Sense visitants",
|
592 |
"NoWebsiteFound": "No s'ha trobat el lloc web",
|
593 |
"NoWebsitesShort": "Sense llocs web",
|
594 |
+
"PossibleSslError": "Possible error del certificat SSL",
|
595 |
+
"PossibleSslErrorExplanation": "S'ha produït un error que podria ser causat per un certificat no vàlid o autosignat: \"%s\". Pot ser que l'inici de sessió us funcioni quan ignoreu la validació SSL, però és menys segur. Podeu canviar la validació SSL en qualsevol moment a la configuració.",
|
596 |
"PullDownToRefresh": "Estireu per actualitzar...",
|
597 |
"RatingDontRemindMe": "No em recordis",
|
598 |
"RatingNotNow": "Ara no",
|
599 |
"RatingNow": "D'acord, el puntuaré ara",
|
600 |
+
"RatingPleaseRateUs": "L'aplicació mòbil Matomo és un programari gratuït, us agrairem molt que dediqueu 1 minut a valorar l'aplicació als %1$s. Si teniu suggeriments de funcions noves o informes d'errors, poseu-vos en contacte amb %2$s",
|
601 |
"ReleaseToRefresh": "Solta per refrescar...",
|
602 |
"Reloading": "Carregant...",
|
603 |
+
"RequestTimedOutShort": "Error de temps d'espera de la xarxa",
|
604 |
+
"RestrictedCompatibility": "Compatibilitat restringida",
|
605 |
+
"RestrictedCompatibilityExplanation": "La versió de Matomo %s que esteu utilitzant no és totalment compatible amb Matomo Mobile 2. És possible que trobeu alguns errors. Us recomanem que actualitzeu Matomo a la darrera versió o que utilitzeu Matomo Mobile 1.",
|
606 |
"SaveSuccessError": "La URL del Matomo o la combinació d'usuari contrasenya es incorrecta.",
|
607 |
"SearchWebsite": "Cerca llocs web",
|
608 |
"ShowAll": "Mostra-ho tot",
|
609 |
"ShowLess": "Mostra menys",
|
610 |
"StaticGraph": "Gràfic de visió general",
|
611 |
"TopVisitedWebsites": "Llocs web més visitats",
|
612 |
+
"TryIt": "Prova-ho!",
|
613 |
"UseSearchBarHint": "Nomes es mostren els %s primers llocs webs aquí. Utilitzeu la barra de cerca per accedir als altres llocs web.",
|
614 |
"ValidateSslCertificate": "Validar certificat SSL",
|
615 |
"VerifyAccount": "Verificant el compte",
|
616 |
"VerifyLoginData": "Asegureu-vos del que el vostre nom d'usuari i contrasenya és correcte.",
|
617 |
+
"YouAreOffline": "Ho sentim, actualment estàs fora de línia"
|
618 |
},
|
619 |
"RowEvolution": {
|
620 |
"AvailableMetrics": "Mètriques disponibles",
|
621 |
+
"CompareDocumentation": "Feu click a l'enllaç a continuació per obrir aquesta finestra emergent per la mateixa taula i comparar múltiples registres <br>Utilitzeu la tecla Shift per marcar la fila per a comparació sense obrir aquesta finestra emergent.",
|
622 |
"CompareRows": "Compareu registres",
|
623 |
"ComparingRecords": "Comparant %s files",
|
624 |
"Documentation": "Feu click a les mètriques per mostrarle al gràfic d'evolució. Utiltizeu la tecla shift per mostrar múltiples mètriques d'una vegada.",
|
625 |
"MetricBetweenText": "entre %1$s i %2$s",
|
626 |
"MetricChangeText": "%s en el període",
|
627 |
+
"MetricMinMax": "%1$s va oscil·lar entre %2$s i %3$s durant el període",
|
628 |
"MetricsFor": "Mètriques per %s",
|
629 |
"MultiRowEvolutionTitle": "Evolució de múltiples files",
|
630 |
"PickARow": "Seleccioneu una fila per comparar",
|
631 |
"PickAnotherRow": "Seleccioneu una altra fila per comparar"
|
632 |
},
|
633 |
"API": {
|
634 |
+
"ChangeTokenHint": "Si voleu canviar aquest testimoni, aneu a la vostra %1$spàgina de configuració personal%2$s.",
|
635 |
+
"EvolutionMetricName": "Evloució %s",
|
636 |
+
"GenerateVisits": "Si no teniu dades d'avui, podeu generar-ne algunes utilitzant el connector %1$s si aneu a 'Desenvolupament → Generador de visitants' a l'àrea d'administració de Matomo.",
|
637 |
+
"Glossary": "Glossari",
|
638 |
"KeepTokenSecret": "El token_auth es tan secret com el vostre usuari i la vostra contrasenya, %1$s no compartiu el seu %2$s!",
|
639 |
+
"LearnAboutCommonlyUsedTerms2": "Obteniu informació sobre els termes que s'utilitzen habitualment per treure el màxim profit de Matomo analytics.",
|
640 |
+
"LoadedAPIs": "Carregades %s API",
|
641 |
+
"MainMetricsReportDocumentation": "Aquest informe ofereix una visió general de les mètriques més importants de totes les categories i connectors.",
|
642 |
+
"MoreInformation": "Més informació sobre les API de Matomo disponible a %1$sIntroducció a l'API de Matomo%2$s i a la %3$sReferència de l'API de Matomo%4$s.",
|
643 |
+
"PluginDescription": "Totes les dades de Matomo estan disponibles mitjançant API simples. Aquest connector és el punt d'entrada del servei web al qual podeu cridar per obtenir les vostres dades d'anàlisi web en XML, JSON, PHP, CSV, etc.",
|
644 |
+
"ReportingApiReference": "Referència de l'API d'informes",
|
645 |
+
"TopLinkTooltip": "Accediu a les vostres dades d'Analytics Web de manera programada mitjançant una API senzilla en JSON, XML, etc.",
|
646 |
+
"UserAuthentication": "Autentificació de l'usuari",
|
647 |
+
"UsingTokenAuth": "Si voleu %1$ssol·licitar dades dins d'un script, un crontab, etc.%2$s heu d'afegir el paràmetre d'URL '%3$s' a les crides de l'API per als URL que requereixen autenticació."
|
648 |
},
|
649 |
"Actions": {
|
650 |
+
"ActionType": "Tipus d'acció",
|
651 |
+
"ActionTypes": "Tipus d'acció",
|
652 |
+
"ActionsInVisit": "Accions a visites",
|
653 |
"AvgGenerationTimeTooltip": "Promig basat en %1$s accessos %2$s entre %3$s i %4$s",
|
654 |
+
"Behaviour": "Comportament",
|
655 |
+
"ColumnActionURL": "URL d'acció",
|
656 |
+
"ColumnClickedURL": "Clic fet a enllaç sortint",
|
657 |
+
"ColumnClickedURLs": "Clic fet a enllaços sortints",
|
658 |
"ColumnClicks": "Clics",
|
659 |
+
"ColumnClicksDocumentation": "Nombre de vegades que s'ha fet clic en aquest enllaç.",
|
660 |
"ColumnDownloadURL": "URL de descàrrega",
|
661 |
+
"ColumnDownloadURLs": "URLs de descàrrega",
|
662 |
"ColumnEntryPageTitle": "Títol de la pàgina d'entrada",
|
663 |
"ColumnEntryPageURL": "URL de la pàgina d'entrada",
|
664 |
+
"ColumnEntryPageURLs": "URLs de pàgines d'entrada",
|
665 |
"ColumnExitPageTitle": "URL de la pàgina de sortida",
|
666 |
"ColumnExitPageURL": "URL de la pàgina de sortida",
|
667 |
+
"ColumnExitPageURLs": "URLs de pàgines de sortida",
|
668 |
+
"ColumnIdPageview": "ID de pàgina vista",
|
669 |
+
"ColumnInteractionPosition": "Posició d'interacció",
|
670 |
"ColumnNoResultKeyword": "Paraula clau sense cap resultat de cerca",
|
671 |
"ColumnPageName": "Nom de la pàgina",
|
|
|
|
|
672 |
"ColumnPageURL": "URL de la pàgina",
|
673 |
+
"ColumnPageViewPosition": "Posició de vista de pàgina",
|
674 |
+
"ColumnPagesPerSearch": "Pàgines dels resultats de la cerca",
|
675 |
+
"ColumnPagesPerSearchDocumentation": "Els visitants cerquen al vostre lloc web i, de vegades, fan clic a \"següent\" per veure més resultats. Aquest és el nombre mitjà de pàgines de resultats de cerca vistes per a aquesta paraula clau.",
|
676 |
"ColumnSearchCategory": "Categoria de cerca",
|
677 |
+
"ColumnSearchExits": "%% sortides de cerca",
|
|
|
678 |
"ColumnSearchExitsDocumentation": "El percentatge de visites que marxen del vostre lloc web desprès de cercar aquesta paraula al cercador del vostre lloc web.",
|
679 |
"ColumnSearchResultsCount": "Resultats de la cerca",
|
680 |
+
"ColumnSearches": "Cerques",
|
681 |
+
"ColumnSearchesDocumentation": "Nombre de visitants que han cercat aquesta paraula clau al cercador de la vostra pàgina web.",
|
682 |
"ColumnSiteSearchKeywords": "Paraules clau úniques",
|
683 |
"ColumnUniqueClicks": "Clics únics",
|
684 |
+
"ColumnUniqueClicksDocumentation": "El nombre de visites que han fet clic en aquest enllaç. Si s'ha fet clic en un enllaç diverses vegades durant una visita, només es compta una vegada.",
|
685 |
"ColumnUniqueDownloads": "Descàrregues úniques",
|
686 |
"ColumnUniqueOutlinks": "Enllaços de sortida únics",
|
687 |
"DownloadsReportDocumentation": "En aquest informe podeu observar quins fitxers han descarrregats els visitants. %s El Matomo només té constància dels clicks als enllaços de descarga, desconeix si la descàrrega s'ha completat o no.",
|
688 |
+
"DownloadsSubcategoryHelp1": "En aquest informe podeu veure quins fitxers han baixat els vostres visitants.",
|
689 |
+
"DownloadsSubcategoryHelp2": "El que Matomo compta com a descàrrega és fer clic a l'enllaç de descàrrega. Matomo no sap si la descàrrega es va completar o no.",
|
690 |
"EntryPageTitles": "Títols de les pàgines d'entrada",
|
691 |
"EntryPageTitlesReportDocumentation": "Aquest informe conté la informació sobre els títols de les pàgines d'entrada que s'han utilitzat durant el període especificat.",
|
692 |
+
"EntryPagesReportDocumentation": "Aquest informe conté informació sobre les pàgines d'entrada durant el període especificat. Una pàgina d'entrada és la primera pàgina que visualitza un usuari durant la seva visita. %s Les URL d'entrada es mostren com una estructura de carpetes.",
|
693 |
+
"EntryPagesSubcategoryHelp1": "Aquest informe conté informació sobre les pàgines d'entrada durant el període especificat. Una pàgina d'entrada és la primera pàgina que visualitza un usuari durant la seva visita.",
|
694 |
+
"EntryPagesSubcategoryHelp2": "Les URL d'entrada es mostren com una estructura de carpetes.",
|
695 |
"ExitPageTitles": "Títols de les pàgines de sortida",
|
696 |
"ExitPageTitlesReportDocumentation": "Aquest informe conté els títols de les pàgins de sortida que s'han utiltizat durant el període especificat.",
|
697 |
+
"ExitPagesReportDocumentation": "Aquest informe conté informació sobre les pàgines de sortida durant el període especificat. Una pàgina de sortida és l'última pàgina que visualitza un usuari durant la seva visita. %s Les URL de sortida es mostren com una estructura de carpetes.",
|
698 |
+
"ExitPagesSubcategoryHelp1": "Aquest informe conté informació sobre les pàgines de sortida durant el període especificat. Una pàgina de sortida és l'última pàgina que visualitza un usuari durant la seva visita.",
|
699 |
+
"ExitPagesSubcategoryHelp2": "Les URL de sortida es mostren com una estructura de carpetes.",
|
700 |
+
"MainMetricsReportDocumentation": "Aquest informe ofereix una visió general molt bàsica de quines accions fan els vostres visitants al vostre lloc web.",
|
701 |
"OneSearch": "1 cerca",
|
702 |
+
"OutlinkDocumentation": "Un enllaç extern és un enllaç que allunya el visitant del vostre lloc web (a un altre domini).",
|
703 |
+
"OutlinksReportDocumentation": "Aquest informe mostra una llista jeràrquica de les URL d'enllaços de sortida als quals han fet clic els vostres visitants.",
|
704 |
+
"OutlinksSubcategoryHelp1": "Aquest informe mostra una llista jeràrquica de les URL d'enllaços externs als quals han fet clic els vostres visitants. Un enllaç extern és un enllaç que allunya el visitant del vostre lloc web (a un altre domini).",
|
705 |
"PageTitlesReportDocumentation": "Aquest informe conté informació sobre els títols de les pàgines que s'han visitat. %1$s El títol de la pàgina es el tag HTML: %2$s, que es mostra al títol de la finestra en la majoría de navegadors.",
|
706 |
+
"PageTitlesSubcategoryHelp1": "Aquest informe conté informació sobre els títols de les pàgines que s'han visitat.",
|
707 |
+
"PageTitlesSubcategoryHelp2": "El títol de la pàgina és l'etiqueta HTML &lt;títol&gt; que la majoria dels navegadors mostren al títol de la finestra.",
|
708 |
"PageUrls": "URLs de les pàgines",
|
709 |
+
"PageViewsByVisitor": "Nombre de vegades que aquest visitant ha vist aquesta pàgina en totes les visites",
|
710 |
+
"PagesReportDocumentation": "Aquest informe conté les URL de les pàgines que s'han visitat. %s La taula s'organitza jerarquicament, i les URL es mostren amb estructura de directoris.",
|
711 |
+
"PagesSubcategoryHelp1": "Aquest informe conté informació sobre les URL de les pàgines visitades.",
|
712 |
+
"PagesSubcategoryHelp2": "La taula està organitzada jeràrquicament, les URL es mostren com una estructura de carpetes.",
|
713 |
+
"PagesSubcategoryHelp3": "Fes servir les icones de més i menys a l'esquerra per navegar.",
|
714 |
+
"PluginDescription": "Informes sobre les pàgines vistes i els títols de les pàgines. Permet mesurar el motor de cerca del teu lloc web intern. Fa un seguiment automàtic dels clics als enllaços externs i a les descàrregues de fitxers.",
|
715 |
+
"RevisitedPages": "Pàgines vistes més d'una vegada",
|
716 |
+
"SiteSearchCategories": "Categories (cerca al lloc)",
|
717 |
+
"SiteSearchCategories1": "Aquest informe mostra les categories que els visitants van seleccionar quan van fer una cerca al vostre lloc web.",
|
718 |
+
"SiteSearchCategories2": "Per exemple, els llocs web de comerç electrònic solen tenir un selector de \"Categoria\" perquè els visitants puguin restringir les seves cerques a només els productes d'una categoria específica.",
|
719 |
+
"SiteSearchCategory": "Categoria (cerca al lloc)",
|
720 |
"SiteSearchFollowingPagesDoc": "Quan els visitants cerquen al teu lloc web, estan buscant una pàgina, un contingut, un producte o un servei en particular. Aquest informe mostra les pàgines que han estat clicades més vegades desprès d'una cerca interna. En altres paraules, la llista de pàgines que han estat més cercades pels visitants que ja están al vostre lloc web.",
|
721 |
+
"SiteSearchIntro": "Observar les cerques que els visitants fan al vostre lloc web és una forma molt efectiva d'aprendre més sobre el que està cercant la vostra audiència. Pot ajudar a trobar idees per a nou contingut, nous productes que els vostres visitants poden estar buscant i permet millorar l'experiència dels visitants al vostre lloc web.",
|
722 |
+
"SiteSearchKeyword": "Paraula clau (Cerca al lloc web)",
|
723 |
+
"SiteSearchKeywordCount": "Recompte de paraules clau (cerca al lloc)",
|
724 |
+
"SiteSearchKeywordCounts": "Recompte de paraules clau (cerca al lloc)",
|
725 |
+
"SiteSearchKeywords": "Paraules clau (cerca al lloc)",
|
726 |
+
"SiteSearchKeywordsDocumentation": "Aquest informe mostra les paraules clau que els visitants han utiltizat per cercar al cercador del vostre lloc web.",
|
727 |
+
"SiteSearchKeywordsNoResultDocumentation": "Aquest informe enumera les paraules clau de cerca que no han retornat cap resultat de la cerca: potser es pot millorar l'algoritme del motor de cerca, o potser els vostres visitants busquen contingut que no es troba (encara) al vostre lloc web?",
|
728 |
+
"SiteSearchSubcategoryHelp1": "La secció Cerca al lloc mostra quines paraules clau fan servir els visitants quan cerquen al vostre lloc web. També mostra quines pàgines veuen els usuaris després de fer una cerca i quines paraules clau de cerca al lloc no donen cap resultat.",
|
729 |
+
"SiteSearchSubcategoryHelp2": "Aquests informes us poden donar idees sobre el contingut que manca al vostre lloc, informació sobre què cerquen els vostres visitants però que no poden trobar fàcilment i molt més.",
|
730 |
+
"SiteSearchSubcategoryHelp3": "Més informació a la guia de cerca al lloc.",
|
731 |
+
"SubmenuPageTitles": "Títols de les pàgines",
|
732 |
"SubmenuPagesEntry": "Pàgines d'entrada",
|
733 |
"SubmenuPagesExit": "Pàgines de sortida",
|
|
|
734 |
"SubmenuSitesearch": "Cerca al lloc",
|
735 |
+
"TimeSpentInReferringAction": "Temps dedicat a l'acció de referència",
|
736 |
"WidgetEntryPageTitles": "Títols de les pàgines d'entrada",
|
737 |
"WidgetExitPageTitles": "Títols de les pàgines de sortida",
|
738 |
+
"WidgetPageTitles": "Títols de les pàgines",
|
739 |
+
"WidgetPageTitlesFollowingSearch": "Títols de pàgines després d'una cerca al lloc",
|
740 |
+
"WidgetPageUrlsFollowingSearch": "Pàgines després d'una cerca al lloc",
|
741 |
"WidgetPagesEntry": "Pàgines d'entrada",
|
742 |
"WidgetPagesExit": "Pàgines de sortida",
|
743 |
+
"WidgetSearchCategories": "Categories de cerca",
|
|
|
|
|
|
|
744 |
"WidgetSearchKeywords": "Paraules de cerca al lloc",
|
745 |
+
"WidgetSearchNoResultKeywords": "Paraules clau de cerca sense resultats"
|
|
|
746 |
},
|
747 |
"Annotations": {
|
748 |
+
"AddAnnotationsFor": "Afegir una anotació per %s...",
|
749 |
"AnnotationOnDate": "Anotació per %1$s: %2$s",
|
750 |
"Annotations": "Anotacions",
|
751 |
+
"ClickToDelete": "Feu click per eliminar l'anotació.",
|
752 |
+
"ClickToEdit": "Feu click per editar aquesta anotació.",
|
753 |
+
"ClickToEditOrAdd": "Feu click per editar o afegir una anotació.",
|
754 |
"ClickToStarOrUnstar": "Feu click per marcar o desmarcar aquesta nota.",
|
755 |
"CreateNewAnnotation": "Crea una nova anotació...",
|
756 |
"EnterAnnotationText": "Introduix la teva nota...",
|
765 |
"YouCannotModifyThisNote": "No podeu modificar aquesta nota perquè o bé no l'heu creada vosatres, o no teni accès d'administrador per aquest lloc web."
|
766 |
},
|
767 |
"Contents": {
|
768 |
+
"ContentImpression": "Impressions de contingut",
|
769 |
+
"ContentInteraction": "Interacció amb el contingut",
|
770 |
+
"ContentInteractions": "Interacció amb els continguts",
|
771 |
"ContentName": "Nom del contingut",
|
772 |
+
"ContentNameReportDocumentation": "Aquest informe mostra els noms del contingut que els vostres visitants han vist i amb el qual han interactuat.",
|
773 |
+
"ContentNames": "Noms del contingut",
|
774 |
+
"ContentPiece": "Element de contingut",
|
775 |
+
"ContentPieceReportDocumentation": "Aquest informe mostra els elements de contingut que els vostres visitants han vist i amb el qual han interactuat.",
|
776 |
+
"ContentPieces": "Parts de contingut",
|
777 |
+
"ContentTarget": "Objectiu de contingut",
|
778 |
+
"ContentTargets": "Objectius de contingut",
|
779 |
+
"Contents": "Continguts",
|
780 |
+
"ContentsSubcategoryHelp1": "El seguiment del contingut us ajuda a determinar la popularitat de contingut específic a qualsevol pàgina del vostre lloc web o aplicació. Aquesta secció informa del nombre d'impressions i interaccions que reben els diferents continguts del vostre lloc.",
|
781 |
+
"ContentsSubcategoryHelp2": "Més informació a la guia de seguiment de contingut.",
|
782 |
+
"Impressions": "Impressions",
|
783 |
+
"ImpressionsMetricDocumentation": "El nombre de vegades que s'ha mostrat un bloc de contingut, com ara un bàner o un anunci, en una pàgina.",
|
784 |
+
"InteractionRate": "Taxa d'interacció",
|
785 |
+
"InteractionRateMetricDocumentation": "La proporció entre impressions de contingut i interaccions.",
|
786 |
+
"InteractionsMetricDocumentation": "El nombre de vegades que s'ha interactuat amb un bloc de contingut (p. ex., un \"clic\" en un bàner o anunci).",
|
787 |
+
"PluginDescription": "El seguiment del contingut i dels bàners us permet mesurar el rendiment (visualitzacions, clics, CTR) de qualsevol contingut de les vostres pàgines (anunci de bàner, imatge, qualsevol element)."
|
788 |
},
|
789 |
"CoreAdminHome": {
|
790 |
+
"AddNewTrustedHost": "Afegeix un nou hoste de confiança",
|
791 |
"Administration": "Administració",
|
792 |
+
"ArchivingSettings": "Configuració d'arxivat",
|
793 |
"BrandingSettings": "Preferències del Branding",
|
794 |
+
"BruteForce": "Força bruta",
|
795 |
+
"CheckToOptIn": "Marqueu aquesta casella per participar.",
|
796 |
"ClickHereToOptIn": "Feu click aquí per apuntar-vos.",
|
797 |
"ClickHereToOptOut": "Feu click aquí per desapuntar-vos.",
|
798 |
+
"ConfirmDeleteAllTrackingFailures": "Esteu segur que voleu suprimir tots els errors de seguiment?",
|
799 |
+
"ConfirmDeleteThisTrackingFailure": "Esteu segur que voleu suprimir aquest error de seguiment?",
|
800 |
+
"Cors": "CORS",
|
801 |
+
"CorsDomains": "Dominis de compartició de recursos creuats (CORS)",
|
802 |
+
"CorsDomainsHelp": "Podeu definir dominis o subdominis com http:\/\/example.com o http:\/\/stats.example.com. O per permetre sol·licituds entre dominis per a tots els dominis, només cal que afegiu un *",
|
803 |
+
"CustomLogoFeedbackInfo": "Si heu personalitzat el log de Matomo, potser també estareu interesants en amagar %1$s l'enllaç al menú superior. Per a fer-ho, podeu deshabilitar l'extensió de Feedback a la pàgina %2$sManage Plugins%3$s.",
|
804 |
"CustomLogoHelpText": "Podeu personalitzar el logo de Matomo que es mostrarà a l'interfície d'usuari i als informes d'emails.",
|
805 |
+
"DeleteAllFailures": "Suprimeix tots els errors",
|
806 |
+
"DevelopmentProcess": "Tot i que el nostre procés de desenvolupament inclou milers de proves automatitzades, els Beta Testers tenen un paper clau a l'hora d'aconseguir la \"Política sense errors\" a Matomo.",
|
807 |
"EmailServerSettings": "Configuració del servidor de correu",
|
808 |
+
"ErrorEmailFromAddressNotValid": "L'adreça SMTP de no és vàlida",
|
809 |
+
"FaviconUpload": "Escull un Favicon per carregar",
|
810 |
+
"FileUploadDisabled": "La càrrega de fitxers no està activada a la configuració de PHP. Per carregar el vostre logotip personalitzat, configureu %s a php.ini i reinicieu el vostre servidor web.",
|
811 |
+
"ForBetaTestersOnly": "Només per a beta testers",
|
812 |
+
"HttpTrackingApi": "API de seguiment HTTP",
|
813 |
+
"HttpTrackingApiDescription": "%1$sL'API de seguiment HTTP%2$s us permet fer un seguiment de qualsevol cosa. Això pot ser útil si utilitzeu un llenguatge de programació per al qual encara no hi ha SDK. També pot ser útil quan voleu fer un seguiment de dispositius o aplicacions d'una manera especial.",
|
814 |
"ImageTracking": "Seguiment per imatge",
|
815 |
"ImageTrackingIntro1": "Quan un visitant ha deshabilitat el JavaScript, o quan el JavaScript no es pot fer servir, podeu fer servir un enllaç a una imatge de seguiment per seguir les vistes.",
|
816 |
"ImageTrackingIntro2": "Generar l'enllaç de sota i copiar-enganxar el codi HTML generat a la pàgina. Si esteu fent servir això com alternativa al seguiment amb JavaScript, heu d'envoltar el codi en %1$s tags.",
|
817 |
"ImageTrackingIntro3": "Per la llista completa d'opcions que podeu fer servir amb una imatge de seguiment, mireu a la %1$sDocumentació de Tracking API%2$s.",
|
818 |
"ImageTrackingLink": "Enllaç de seguiment amb imatge",
|
819 |
+
"ImportFromGoogleAnalytics": "Importar des de Google Analytics",
|
820 |
+
"ImportFromGoogleAnalyticsDescription": "Si teniu una propietat de Google Analytics i esteu canviant a Matomo, podeu importar les vostres dades existents mitjançant el connector %1$sGoogleAnalyticsImporter%2$s.",
|
821 |
"ImportingServerLogs": "Important els Registres del Servidor",
|
822 |
"ImportingServerLogsDesc": "Una alternativa a seguir els visitants a través del navegador (tant amb JavaScript com amb un enllaç de imatge) és important continuament els registres del servidor. Informeu-vos més a %1$sServer Log File Analytics%2$s.",
|
823 |
+
"InvalidPluginsWarning": "Els connectors següents no són compatibles amb %1$s i no s'han pogut carregar: %2$s.",
|
824 |
+
"InvalidPluginsYouCanUninstall": "Podeu actualitzar o desinstal·lar aquests connectors a la pàgina %1$sGestiona els connectors%2$s.",
|
825 |
+
"JSTrackingIntro1": "Podeu fer un seguiment dels visitants del vostre lloc web de moltes maneres diferents. La manera recomanada de fer-ho és mitjançant JavaScript. Per utilitzar aquest mètode heu d'assegurar-vos que cada pàgina web del vostre lloc web tingui algun codi JavaScript, que podeu generar aquí.",
|
826 |
+
"JSTrackingIntro2": "Un cop tingueu el codi de seguiment de JavaScript per al vostre lloc web, copieu-lo i enganxeu-lo a totes les pàgines de les que vulgueu fer un seguiment amb Matomo.",
|
827 |
+
"JSTrackingIntro3a": "A la majoria de llocs web, blocs, CMS, etc., podeu utilitzar un connector predefinit per fer el treball tècnic per vosaltres. (Consulteu la nostra %1$slista de connectors utilitzats per integrar Matomo%2$s.)",
|
828 |
+
"JSTrackingIntro3b": "Si no existeix cap connector, podeu editar les plantilles del vostre lloc web i afegir el codi de seguiment de JavaScript a l'etiqueta <\/head> que sovint es defineix en un fitxer de plantilla \"header.php\", \"header.tpl\" o similar.",
|
829 |
+
"JSTrackingIntro4": "Si no voleu utilitzar JavaScript per fer un seguiment dels visitants, %1$sgenereu una imatge d'enllaç de seguiment a sota de%2$s.",
|
830 |
"JSTrackingIntro5": "Si desitja fer més que rastrejar visites de pàgina, revisa la %1$sDocumentació javascript de Matomo %2$s sobre la llista de funcions disponibles. Utilitzant aquestes funcions, pots rastrejar objectius, variables personalitzades, compres d'e-comerç, compres abandonades i més.",
|
831 |
+
"JSTracking_CampaignKwdParam": "Paràmetre de paraula clau de campanya",
|
832 |
+
"JSTracking_CampaignNameParam": "Paràmetre de nom de campanya",
|
833 |
+
"JSTracking_CodeNoteBeforeClosingHead": "Assegureu-vos que aquest codi estigui a totes les pàgines del vostre lloc web. Recomanem enganxar-lo just abans de l'etiqueta de tancament %1$s.",
|
834 |
+
"JSTracking_CodeNoteBeforeClosingHeadEmail": "Assegureu-vos que aquest codi estigui incrustat dins d'un element d'script a cada pàgina del vostre lloc web. Recomanem enganxar-lo just abans de l'etiqueta de tancament HEAD.",
|
835 |
+
"JSTracking_CrossDomain": "Per defecte, l'ID de visitant que identifica un visitant únic s'emmagatzema a les galetes pròpies del navegador a les quals només es pot accedir des de les pàgines del mateix domini. L'habilitació de l'enllaç creuat entre dominis us permet fer un seguiment de totes les accions i pàgines vistes d'un visitant específic a la mateixa visita, fins i tot quan vegin pàgines de diversos dominis. Sempre que un usuari faci clic en un enllaç a un dels URL d'àlies del vostre lloc web, afegeix un paràmetre d'URL pk_vid que reenvia l'ID de visitant.",
|
836 |
+
"JSTracking_CrossDomain_NeedsMultipleDomains": "Nota: per utilitzar l'enllaç creuat entre dominis, heu d'especificar més d'un nom de domini (URL) per al vostre lloc web.",
|
837 |
+
"JSTracking_CustomCampaignQueryParam": "Utilitzeu noms de paràmetres de consulta personalitzats per al nom i la paraula clau de la campanya",
|
838 |
+
"JSTracking_CustomCampaignQueryParamDesc": "Nota: %1$sMatomo detectarà automàticament els paràmetres de Google Analytics.%2$s",
|
839 |
+
"JSTracking_DisableCookies": "Desactiveu totes les galetes de seguiment",
|
840 |
+
"JSTracking_DisableCookiesDesc": "Desactiva totes les galetes pròpies. Les galetes de Matomo existents per a aquest lloc web s'eliminaran a la pàgina següent.",
|
841 |
+
"JSTracking_EnableCrossDomainLinking": "Habilita l'enllaç creuat entre dominis",
|
842 |
+
"JSTracking_EnableDoNotTrack": "Activa la detecció de DoNotTrack del costat del client",
|
843 |
+
"JSTracking_EnableDoNotTrackDesc": "Per tant, les sol·licituds de seguiment no s'enviaran si els visitants no volen ser rastrejats.",
|
844 |
+
"JSTracking_EnableDoNotTrack_AlreadyEnabled": "Nota: S'ha habilitat el suport de DoNotTrack del costat del servidor, de manera que aquesta opció no tindrà cap efecte.",
|
845 |
+
"JSTracking_EndNote": "Nota: podeu generar un codi de seguiment personalitzat a la secció d'administració %1$sCodi de seguiment%2$s.",
|
846 |
+
"JSTracking_GroupPageTitlesByDomain": "Avantposeu el domini del lloc al títol de la pàgina quan feu el seguiment",
|
847 |
+
"JSTracking_GroupPageTitlesByDomainDesc1": "Per tant, si algú visita la pàgina \"Quant a\" al bloc.%1$s es registrarà com a \"bloc \/ Quant a\". Aquesta és la manera més senzilla d'obtenir una visió general del trànsit per subdomini.",
|
848 |
+
"JSTracking_MergeAliases": "A l'informe \"Enllaços externs\", amagueu els clics als URL d'àlies coneguts de",
|
849 |
+
"JSTracking_MergeAliasesDesc": "Així els clics als enllaços a URL d'àlies (per exemple, %s) no es comptaran com a \"Enllaç extern\".",
|
850 |
+
"JSTracking_MergeSubdomains": "Feu un seguiment dels visitants a tots els subdominis de",
|
851 |
+
"JSTracking_MergeSubdomainsDesc": "Per tant si un visitant visita %1$s i %2$s es comptarà com a visitant únic.",
|
852 |
+
"JSTracking_PageCustomVars": "Feu un seguiment d'una variable personalitzada per a cada vista de pàgina",
|
853 |
+
"JSTracking_PageCustomVarsDesc": "Per exemple, amb el nom de variable \"Categoria\" i el valor \"Llibre blanc\".",
|
854 |
+
"JSTracking_TrackNoScript": "Seguiment dels usuaris amb JavaScript desactivat",
|
855 |
+
"JSTracking_VisitorCustomVars": "Feu un seguiment de les variables personalitzades per a aquest visitant",
|
856 |
+
"JSTracking_VisitorCustomVarsDesc": "Per exemple, amb el nom de la variable \"Tipus\" i el valor \"Client\".",
|
857 |
+
"JavaScriptTracking": "Seguiment amb Javascript",
|
858 |
+
"JsTrackingCodeMissingEmail1": "Fa uns dies vau afegir el lloc web '%s' al vostre Matomo Analytics. Ho acabem de comprovar i el vostre Matomo no sembla tenir cap trànsit registrat per a aquest lloc web.",
|
859 |
+
"JsTrackingCodeMissingEmail2": "Per començar a fer un seguiment de les dades i obtenir informació sobre els vostres usuaris, haureu de configurar el seguiment al vostre lloc web o a l'aplicació mòbil. Per als llocs web, simplement inseriu el codi de seguiment just abans de l'etiqueta %s.",
|
860 |
+
"JsTrackingCodeMissingEmail3": "Per trobar i personalitzar el vostre codi de seguiment, %1$sfeu clic aquí%2$s (o feu una ullada a la %3$sGuia del client de seguiment de JavaScript%4$s).",
|
861 |
+
"LearnMore": "Aprèn més",
|
862 |
+
"LogoNotWriteableInstruction": "Per utilitzar el vostre logotip personalitzat en lloc del logotip predeterminat de Matomo, doneu permís d'escriptura a aquest directori: %1$s Matomo necessita accés d'escriptura per als vostres logotips emmagatzemats als fitxers %2$s.",
|
863 |
"LogoUpload": "Seleccioneu un logo per pujar",
|
864 |
+
"LogoUploadFailed": "El fitxer penjat no s'ha pogut processar. Comproveu si el fitxer té un format vàlid.",
|
865 |
+
"LogoUploadHelp": "Pengeu un fitxer en formats %1$s amb una alçada mínima de %2$s píxels.",
|
866 |
+
"LtsReleases": "Les versions LTS (suport a llarg termini) només reben correccions de seguretat i correccions d'errors.",
|
867 |
+
"MenuDevelopment": "Desenvolupament",
|
868 |
+
"MenuDiagnostic": "Diagnòstic",
|
869 |
"MenuGeneralSettings": "Configuració general",
|
870 |
+
"MenuMeasurables": "Mesurables",
|
871 |
+
"MenuSystem": "Sistema",
|
872 |
+
"MissingTrackingCodeEmailSubject": "No hi ha trànsit enregistrat per a %s a Matomo Analytics, comença ara",
|
873 |
+
"NTrackingFailures": "%s errors de seguiment",
|
874 |
+
"NoKnownFailures": "No hi ha errors de seguiment coneguts.",
|
875 |
"OptOutComplete": "Baixa complerta. Les teves visites en aquest lloc web no es tindrán en compte per l'eina d'anàlisis Web.",
|
876 |
"OptOutCompleteBis": "Teniu en compte que si borreu les cookies, borreu la cookie de baixa o si canvieu d'ordenador o de navegadaor web, haureu de tornar a realitzar el proces de baixa.",
|
877 |
+
"OptOutDntFound": "No se us rastreja perquè el vostre navegador informa que no ho permeteu. Aquesta és una configuració del vostre navegador, de manera que no us podreu inscriure mentre no desactiveu la funció \"No fer el seguiment\".",
|
878 |
+
"OptOutErrorNoCookies": "La funció de desactivació del seguiment requereix que les galetes estiguin habilitades.",
|
879 |
+
"OptOutErrorNotHttps": "És possible que la funció de desactivació del seguiment no funcioni perquè aquest lloc no s'ha carregat mitjançant HTTPS. Torneu a carregar la pàgina per comprovar si l'estat de desactivació ha canviat.",
|
880 |
+
"OptOutErrorWindowOpen": "És possible que la funció de desactivació de seguiment no funcioni perquè sembla que s'ha bloquejat la finestra emergent de desactivació. Torneu a carregar la pàgina per comprovar si l'estat de desactivació ha canviat.",
|
881 |
"OptOutExplanation": "El Matomo, podeu afegir el següent codi HTML a una de les pàgiens del vostre lloc web, per exemple a la pàgina de política de privacitat.",
|
882 |
+
"OptOutExplanationIntro": "Aquest codi mostrarà un iFrame que conté un enllaç perquè els vostres visitants puguin desactivar Matomo mitjançant la configuració d'una galeta de desactivació als seus navegadors web. Vegeu a continuació (o %1$s feu clic aquí%2$s) per veure el contingut que mostrarà l'iFrame.",
|
883 |
"OptOutForYourVisitors": "Pàgina de baixa del Matomo pels vostres visitants",
|
884 |
+
"OptingYouOut": "Desactivació en marxa, espereu…",
|
885 |
+
"PersonalPluginSettings": "Configuració del connector personal",
|
886 |
"PiwikIsInstalledAt": "El Matomo està instal·lat a",
|
887 |
+
"PluginSettingChangeNotAllowed": "No teniu permís per canviar el valor de la configuració \"%1$s\" al connector \"%2$s\"",
|
888 |
+
"PluginSettingReadNotAllowed": "No teniu permís per llegir el valor de la configuració \"%1$s\" al connector \"%2$s\"",
|
889 |
+
"PluginSettings": "Configuració del connector",
|
890 |
+
"PluginSettingsIntro": "Aquí podeu canviar la configuració dels següents connectors de tercers:",
|
891 |
+
"PluginSettingsSaveFailed": "No s'ha pogut desar la configuració del connector",
|
892 |
+
"PluginSettingsSaveSuccess": "Configuració del connector actualitzada.",
|
893 |
+
"PluginSettingsValueNotAllowed": "El valor del camp \"%1$s\" al connector \"%2$s\" no està permès",
|
894 |
+
"Problem": "Problema",
|
895 |
+
"ProtocolNotDetectedCorrectly": "Actualment esteu veient Matomo mitjançant una connexió SSL segura (mitjançant HTTPS), però Matomo només ha pogut detectar una connexió no segura al servidor.",
|
896 |
+
"ProtocolNotDetectedCorrectlySolution": "Per assegurar-vos que Matomo sol·licita i ofereix el vostre contingut de manera segura a través d'HTTPS, podeu editar el vostre fitxer %1$s i ajustar la vostra configuració del servidor intermediari, o bé podeu afegir la línia %2$s a sota de la secció %3$s. %4$sMés informació%5$s",
|
897 |
+
"ReleaseChannel": "Canal de publicació",
|
898 |
+
"SecurityNotificationAllTokenAuthDeletedBody": "Algú ha esborrat tots els testimonis d'autenticació del vostre compte.",
|
899 |
+
"SecurityNotificationCheckTwoFactor": "Comproveu la vostra aplicació o dispositiu d'autenticació de dos factors.",
|
900 |
+
"SecurityNotificationEmailSubject": "Notificació de seguretat",
|
901 |
+
"SecurityNotificationIfItWasYou": "Si heu estat vos, endavant. Si no reconeixeu aquesta activitat, restabliu la vostra contrasenya.",
|
902 |
+
"SecurityNotificationRecoveryCodesRegeneratedBody": "Algú ha generat nous codis de recuperació d'autenticació de dos factors per al vostre compte.",
|
903 |
+
"SecurityNotificationRecoveryCodesShowedBody": "Algú ha vist els codis de recuperació d'autenticació de dos factors del vostre compte.",
|
904 |
+
"SecurityNotificationSettingsChangedByOtherSuperUserBody": "Un altre superusuari (%1$s) ha modificat la configuració del sistema. Configuració afectada: %2$s. Si reconeixeu aquesta activitat, continueu. Si no reconeixeu aquesta activitat, poseu-vos en contacte amb els altres súper usuaris.",
|
905 |
+
"SecurityNotificationSettingsChangedByUserBody": "Algú ha modificat la configuració del sistema. Configuració afectada: %s.",
|
906 |
+
"SecurityNotificationTokenAuthCreatedBody": "Algú ha creat un testimoni d'autenticació (descripció: %s) al vostre compte. Si no has estat tu, elimina el testimoni.",
|
907 |
+
"SecurityNotificationTokenAuthDeletedBody": "Algú ha suprimit un testimoni d'autenticació (descripció: %s) del vostre compte.",
|
908 |
+
"SecurityNotificationTwoFactorAuthDisabledBody": "Algú ha desactivat l'autenticació de dos factors al vostre compte.",
|
909 |
+
"SecurityNotificationTwoFactorAuthEnabledBody": "Algú ha activat l'autenticació de dos factors al vostre compte.",
|
910 |
+
"SecurityNotificationUserCreatedBody": "Algú ha creat un usuari nou (inici de sessió: %s) al vostre compte.",
|
911 |
+
"SecurityNotificationUserDeletedBody": "Algú ha suprimit un usuari (inici de sessió: %s) del vostre compte.",
|
912 |
+
"SendPluginUpdateCommunication": "Enviar un correu electrònic quan hi hagi una actualització del connector disponible",
|
913 |
+
"SendPluginUpdateCommunicationHelp": "S'enviarà un correu electrònic als Superusuaris quan hi hagi una versió nova disponible per a un connector.",
|
914 |
+
"SettingsSaveSuccess": "Configuració actualitzada.",
|
915 |
+
"SinglePageApplicationDescription": "Si feu el seguiment d'una aplicació d'una sola pàgina (SPA) o d'una aplicació web progressiva (PWA), consulteu %1$saquesta guia%2$s.",
|
916 |
+
"Solution": "Solució",
|
917 |
+
"StableReleases": "Si Matomo és una part fonamental del vostre negoci us recomanem que utilitzeu la darrera versió estable. Si feu servir la darrera versió beta i trobeu un error o teniu un suggeriment, %1$svegeu aquí%2$s.",
|
918 |
+
"SystemPluginSettings": "Configuració del connector del sistema",
|
919 |
+
"TrackAGoal": "Seguiment d'un objectiu",
|
920 |
+
"TrackingCode": "Codi de seguiment",
|
921 |
+
"TrackingCodeIntro": "Matomo us ofereix diverses maneres d'incrustar el codi de seguiment per al vostre lloc web, aplicació mòbil i fins i tot per a qualsevol dispositiu o aplicació.",
|
922 |
+
"TrackingFailureAuthenticationProblem": "La sol·licitud no s'ha autenticat, però calia l'autenticació.",
|
923 |
+
"TrackingFailureAuthenticationSolution": "Defineix o corregeix un \"token_auth\" a la teva sol·licitud de seguiment.",
|
924 |
+
"TrackingFailureInvalidSiteProblem": "El lloc no existeix.",
|
925 |
+
"TrackingFailureInvalidSiteSolution": "Actualitzeu l'idSite configurat al rastrejador.",
|
926 |
+
"TrackingFailures": "Errors de seguiment",
|
927 |
+
"TrackingFailuresEmail1": "Això és només per fer-vos saber que %s diferents tipus d'errors de seguiment s'han produït en els últims dies.",
|
928 |
+
"TrackingFailuresEmail2": "Per veure totes les sol·licituds de seguiment fallides %1$s feu clic aquí%2$s.",
|
929 |
+
"TrackingFailuresEmailSubject": "Errors de seguiment al vostre Matomo Analytics",
|
930 |
+
"TrackingFailuresIntroduction": "Aquesta pàgina enumera els errors de seguiment que s'han produït durant els darrers %s dies. Tingueu en compte que només s'enregistren els errors de seguiment més habituals i no pas tots.",
|
931 |
+
"TrackingURL": "URL de seguiment",
|
932 |
+
"TrustedHostConfirm": "Esteu segur que voleu canviar el nom de la màquina (hostname) de confiança del Matomo?",
|
933 |
"TrustedHostSettings": "Nom del host de Matomo de confiança",
|
934 |
+
"TwoFactorAuth": "Autorització de dos factors",
|
935 |
+
"UiDemo": "Demo de l'interfície d'usuari",
|
936 |
+
"UncheckToOptOut": "Desmarqueu aquesta casella per excloure-us.",
|
937 |
+
"UpdateSettings": "Actualitza la configuració",
|
938 |
"UseCustomLogo": "Utilitza un logo personalitzat",
|
939 |
"ValidPiwikHostname": "Nom del host de Matomo vàlid",
|
940 |
+
"ViewAllTrackingFailures": "Veure tots els errors de seguiment",
|
941 |
+
"WhatIsNew": "Què hi ha de nou",
|
942 |
+
"WhatIsNewNoChanges": "No hi ha res de nou de moment",
|
943 |
+
"WhatIsNewNoChangesTitle": "No hi ha canvis recents",
|
944 |
+
"WhatIsNewTitle": "Aquí teniu les novetats de Matomo",
|
945 |
+
"WhatIsNewTooltip": "Descobriu les novetats de Matomo",
|
946 |
+
"WithOptionalRevenue": "amb ingressos opcionals",
|
947 |
+
"YouAreNotOptedOut": "No us heu exclòs.",
|
948 |
"YouAreOptedOut": "Actualment esteu donat de baixa.",
|
949 |
"YouMayOptOut": "Podeu escollir no tenir un únic nombre d'identificació assignat al vostre ordinador per evitar l'agregació i l'anàlisi de la informació recollida en aquest lloc web.",
|
950 |
+
"YouMayOptOut2": "Podeu optar per evitar que aquest lloc web agregui i analitzi les accions que feu aquí.",
|
951 |
+
"YouMayOptOut3": "Si ho feu protegireu la vostra privadesa, però també impedireu que el propietari aprengui de les vostres accions i creï una millor experiència per a vos i la resta d'usuaris.",
|
952 |
"YouMayOptOutBis": "Per prendre aquesta decisió, feu click a continuació per rebre una cookie de baixa."
|
953 |
},
|
954 |
"CoreHome": {
|
955 |
+
"AdblockIsMaybeUsed": "En cas que utilitzeu un bloquejador d'anuncis desactiveu-lo per a aquest lloc, per assegurar-vos que Matomo funciona sense cap problema.",
|
956 |
+
"AddTotalsRowDataTable": "L'informe no mostra la fila de totals %s Mostra la fila de totals",
|
957 |
"CategoryNoData": "No hi ha dades en aquesta categoria. Proveu d'incloure tota la població.",
|
958 |
+
"ChangeCurrentWebsite": "Trieu un lloc web, lloc web seleccionat actualment: %s",
|
959 |
+
"ChangePeriod": "Canviar el període",
|
960 |
+
"ChangeVisualization": "Canviar la visualització",
|
961 |
"CheckForUpdates": "Cerca actualitzacions",
|
962 |
+
"CheckPiwikOut": "Fes una ullada a Matomo!",
|
963 |
+
"ChooseX": "Trieu %1$s",
|
964 |
+
"ClickRowToExpandOrContract": "Feu clic en aquesta fila per ampliar o reduir la subtaula.",
|
965 |
+
"ClickToEditX": "Feu clic per editar %s",
|
966 |
+
"ClickToSeeFullInformation": "Feu clic per veure tota la informació",
|
967 |
+
"CloseSearch": "Tancar la cerca",
|
968 |
+
"CloseWidgetDirections": "Podeu tancar aquest giny fent clic a la icona \"X\" a la part superior del giny.",
|
969 |
+
"CssDidntLoad": "El vostre navegador no ha pogut carregar l'estil d'aquesta pàgina.",
|
970 |
+
"CustomLimit": "Límit personalitzat",
|
971 |
+
"DataForThisReportHasBeenDisabled": "Actualment la segmentació està desactivada per a aquest informe. Si us plau, consulteu %1$saquest FAQ%2$s per obtenir més detalls.",
|
972 |
"DataForThisReportHasBeenPurged": "La informació d'aquest informés és anterior a %s mesos d'antiguitat i s'ha purgat.",
|
973 |
+
"DataTableCombineDimensions": "Les dimensions es mostren per separat %s Mostra les dimensions combinades",
|
974 |
"DataTableExcludeAggregateRows": "Es mostren les files aggrupades %s Amaga-ho",
|
975 |
+
"DataTableHowToSearch": "Premeu Intro o feu clic a la icona de cerca per cercar",
|
976 |
"DataTableIncludeAggregateRows": "No es mostren les files agrupades %s Mostra-les",
|
977 |
+
"DataTableShowDimensions": "Les dimensions s'han combinat %s Mostra les dimensions per separat",
|
978 |
+
"DateInvalid": "La combinació de data i període indicada no és vàlida. Trieu una data vàlida al selector de dates.",
|
979 |
"Default": "per defecte",
|
980 |
+
"DevicesSubcategoryHelp": "La secció Dispositius us ajuda a entendre la tecnologia que fan servir els vostres visitants per accedir al vostre lloc. Veureu informes sobre el tipus de dispositiu i models específics que us permetran optimitzar el vostre lloc per als dispositius més populars.",
|
981 |
+
"DonateCall1": "Matomo mai us costarà res d'utilitzar, però això no vol dir que no ens costi res de fer.",
|
982 |
+
"DonateCall2": "Matomo necessita el vostre suport continuat per créixer i prosperar.",
|
983 |
+
"DonateCall3": "Si creieu que Matomo ha afegit un valor important al vostre negoci o esforç, %1$si us plau, considereu donar%2$s o %3$scomprar una funció premium%4$s. Cada cèntim ajudarà.",
|
984 |
+
"EndDate": "Data final",
|
985 |
+
"EndShortcut": "Final",
|
986 |
+
"EngagementSubcategoryHelp1": "La secció Implicació ofereix informes que ajuden a quantificar quants visitants nous i recurrents rebeu. També podeu revisar informes que desglossen el temps mitjà i el nombre de pàgines per visita, així com el nombre de vegades que un visitant ha visitat el vostre lloc i el nombre de dies més habitual entre visites.",
|
987 |
+
"EngagementSubcategoryHelp2": "Això us pot ajudar a optimitzar la freqüència i les visites d'alta interacció, a més de maximitzar el vostre abast.",
|
988 |
+
"EnterZenMode": "Entra al mode Zen (amaga els menús)",
|
989 |
+
"ExceptionNotAllowlistedIP": "No podeu utilitzar aquest Matomo perquè la vostra IP %s no està permesa.",
|
990 |
"ExcludeRowsWithLowPopulation": "Es mostren totes les files %s No mostris la població inferior",
|
991 |
+
"ExitZenMode": "Sortir del mode Zen (mostrar els menús)",
|
992 |
+
"ExpandSubtables": "Amplieu les subtaules",
|
993 |
+
"ExportFormat": "Format d'exportació",
|
994 |
+
"ExportTooltip": "Nota: per utilitzar l'URL d'exportació generat, haureu d'especificar una autenticació de testimoni d'aplicació. Podeu configurar aquests testimonis a Admin -> Security -> Token Auths.",
|
995 |
+
"ExportTooltipWithLink": "Nota: per utilitzar l'URL d'exportació generat, haureu d'especificar una autenticació de testimoni d'aplicació. Podeu configurar aquests testimonis a %1$s[Administrador -> Seguretat -> Fitxers d'autenticació]%2$s. Substituïu %3$s a l'URL d'exportació pel vostre testimoni d'autenticació. Avís: mai compartiu l'URL amb el testimoni real amb ningú més.",
|
996 |
+
"ExternalHelp": "Ajuda (s'obre en una pestanya nova)",
|
997 |
+
"FlattenDataTable": "L'informe es jeràrquic %s Feu-lo pla",
|
998 |
+
"FlattenReport": "Allisar l'informe",
|
999 |
+
"FormatMetrics": "Format de mètriques",
|
1000 |
+
"HideExportUrl": "Amaga l'URL d'exportació",
|
1001 |
+
"HomeShortcut": "Inici",
|
1002 |
"IncludeRowsWithLowPopulation": "No es mostren les files amb polbació inferior %s Mostra totes les files",
|
1003 |
"InjectedHostEmailBody": "Hola, He provat d'accedir al Matomo avui i m'he trobat amb l'avís de nom de la màquina desconegut.",
|
1004 |
"InjectedHostEmailSubject": "S'ha accedit al Matomo amb un nom de màquina desconegut: %s",
|
1005 |
"InjectedHostNonSuperUserWarning": "%1$sClick here to access Matomo safely%2$s i eliminar aaquest avíst. Potse també voldreu contractar amb l'administrador del vostre Matomo i notificar-li aquesta incidència (%3$sclick here to email%4$s).",
|
1006 |
"InjectedHostSuperUserWarning": "Pot ser que el Matomo estigui mal configurat (per exemple, si el Matomo s'ha mogut a un nou servidor o URL). Podeu %1$sfer click aquí i afegir %2$s com el nom de la màquina vàlid (si hi confieu)%3$s, o bé %4$s fer click aquí %5$s per accedir al Matomo de forma segura%6$s.",
|
1007 |
"InjectedHostWarningIntro": "Esteu accedint al Matomo desde %1$s, però el Matomo està configurat per escoltar a l'adreça: %2$s.",
|
1008 |
+
"JavascriptDisabled": "JavaScript ha d'estar habilitat perquè pugueu utilitzar Matomo amb la vista estàndard.<br>No obstant això sembla que JavaScript està desactivat o no és compatible amb el vostre navegador.<br>Per utilitzar la vista estàndard, activeu JavaScript canviant les opcions del navegador i després %1$storneu-ho a provar%2$s.<br>",
|
1009 |
+
"JsDidntLoad": "El vostre navegador no ha pogut carregar els scripts d'aquesta pàgina.",
|
1010 |
+
"LeadingAnalyticsPlatformRespectsYourPrivacy": "La plataforma d'anàlisi oberta líder que respecta la vostra privadesa.",
|
1011 |
+
"MacPageDown": "Fn + fletxa dreta",
|
1012 |
+
"MacPageUp": "Fn + fletxa esquerra",
|
1013 |
+
"MainNavigation": "Navegació principal",
|
1014 |
+
"Menu": "Menú",
|
1015 |
+
"MenuEntries": "Entrades del menú",
|
1016 |
"NoPrivilegesAskPiwikAdmin": "Esteu identificat com a '%1$s' però sembla que no teniu cap permís establert al Matomo. %2$s Pregunteu al vostre administrador de Matomo (feu click per enviar un email)%3$s que us dongui access per veure un lloc web.",
|
1017 |
+
"NoSuchPage": "Aquesta pàgina no existeix",
|
1018 |
+
"OneClickUpdateNotPossibleAsMultiServerEnvironment": "L'actualització d'un sol clic no està disponible perquè utilitzeu Matomo amb diversos servidors. Baixeu la darrera versió de %1$s per continuar.",
|
1019 |
+
"OnlyForSuperUserAccess": "Aquest widget només es mostra al tauler predeterminat per als usuaris que tenen accés de superusuari.",
|
1020 |
+
"PageDownShortcutDescription": "per arribar al final de la pàgina",
|
1021 |
+
"PageUpShortcutDescription": "per anar al capdamunt de la pàgina",
|
1022 |
+
"PeriodHasOnlyRawData": "Sembla que els informes d'aquest període encara no s'han processat. Vols veure què passa ara? Consulteu el %1$sRegistre de visites%2$s o trieu un període de dates diferent mentre no es generin els informes.",
|
1023 |
"PeriodRange": "Rang",
|
1024 |
+
"PivotBySubtable": "Aquest informe no està orientat %1$s Gira per %2$s",
|
1025 |
+
"Profilable": "Perfilable",
|
1026 |
+
"QuickAccessTitle": "Cerca %s. Utilitzeu les tecles de direcció per navegar pels resultats de la cerca. Drecera: premeu 'f' per cercar.",
|
1027 |
+
"QuickLinks": "Enllaços ràpids",
|
1028 |
+
"ReadMoreOnlineGuide": "Llegiu més sobre aquest tema a la guia en línia.",
|
1029 |
+
"RemoveTotalsRowDataTable": "L'informe mostra la fila de totals %s Elimina la fila de totals",
|
1030 |
"ReportGeneratedOn": "Informe generat el %s",
|
1031 |
"ReportGeneratedXAgo": "Informe generat fa %s",
|
1032 |
+
"ReportType": "Tipus d'informe",
|
1033 |
+
"ReportWithMetadata": "Informe amb metadades",
|
1034 |
+
"ReportingCategoryHelpPrefix": "Com m'ajuda la pàgina d'informes \"%1$s > %2$s\"?",
|
1035 |
+
"RowLimit": "Límit de files",
|
1036 |
+
"SearchOnMatomo": "Cerqueu \"%1$s\" a Matomo.org",
|
1037 |
+
"SeeAvailableVersions": "Consulteu les versions disponibles",
|
1038 |
+
"Segments": "Segments",
|
1039 |
+
"SharePiwikLong": "Bones! Acabo de trobar un gran programari lliure: Matomo!\n\nMatomo et permetrà fer un seguiment dels visitants del teu lloc web de forma gratuïta. De veritat que l'hauries de provar!",
|
1040 |
+
"SharePiwikShort": "Matomo! Analítica web gratuïta\/lliure. Sigues propietari de les teves dades.",
|
1041 |
+
"ShareThis": "Comparteix-ho",
|
1042 |
+
"ShortcutCalendar": "per obrir el calendari (d vol dir Date)",
|
1043 |
+
"ShortcutHelp": "per mostrar aquesta ajuda",
|
1044 |
+
"ShortcutSearch": "per obrir la cerca (f vol dir Find)",
|
1045 |
+
"ShortcutSegmentSelector": "per obrir el selector Segment",
|
1046 |
+
"ShortcutWebsiteSelector": "per obrir el selector Lloc Web",
|
1047 |
+
"ShortcutZenMode": "per mode Zen",
|
1048 |
+
"ShortcutsAvailable": "Dreceres disponibles",
|
1049 |
+
"ShowExportUrl": "Mostra l'URL d'exportació",
|
1050 |
"ShowJSCode": "Mostra el codi JavaScript necessari",
|
1051 |
+
"SkipToContent": "Saltar al contingut",
|
1052 |
+
"SoftwareSubcategoryHelp": "La secció Programari mostra els sistemes operatius, els navegadors i els connectors que fan servir els vostres visitants per accedir al lloc perquè pugueu optimitzar el vostre lloc per assegurar-vos que és totalment compatible amb les configuracions més populars.",
|
1053 |
+
"StandardReport": "Informe estàndard",
|
1054 |
+
"StartDate": "Data d'inici",
|
1055 |
+
"SubscribeAndBecomePiwikSupporter": "Aneu a una pàgina de pagament segura amb targeta de crèdit (Paypal) per convertir-vos en un benefactor de Matomo!",
|
1056 |
+
"SupportPiwik": "Dona suport a Matomo!",
|
1057 |
+
"SupportUsOn": "Doneu-nos suport",
|
1058 |
+
"SystemSummaryMysqlVersion": "Versió de MySQL",
|
1059 |
+
"SystemSummaryNActivatedPlugins": "%d connectors activats",
|
1060 |
+
"SystemSummaryNSegments": "%1$d segments",
|
1061 |
+
"SystemSummaryNSegmentsWithBreakdown": "%1$d segments (%2$s preprocessats, %3$s processats en temps real)",
|
1062 |
+
"SystemSummaryNWebsites": "%d llocs web",
|
1063 |
+
"SystemSummaryPhpVersion": "Versió del PHP",
|
1064 |
+
"SystemSummaryPiwikVersion": "Versió de Matomo",
|
1065 |
+
"SystemSummaryWidget": "Resum del sistema",
|
1066 |
+
"TableNoData": "No hi ha dades per a aquesta taula.",
|
1067 |
+
"TechDeprecationWarning": "A partir de la versió de Matomo %1$s, Matomo finalitzarà el suport per a %2$s. Per obtenir més informació %3$sconsulteu la nostra entrada al bloc.%4$s",
|
1068 |
+
"ThanksFromAllOfUs": "Gràcies de part de tots nosaltres a Matomo!",
|
1069 |
"ThereIsNoDataForThisReport": "No hi ha informació per aquest informe.",
|
1070 |
"UnFlattenDataTable": "Aquest informe es pla %s Feu-lo jeràrquic",
|
1071 |
+
"UndoPivotBySubtable": "Aquest informe s'ha girat %s Desfés el gir",
|
1072 |
+
"ViewAllPiwikVideoTutorials": "Veure tots els tutorials de vídeo de Matomo",
|
1073 |
+
"VisitStatusOrdered": "Ordenat",
|
1074 |
+
"VisitStatusOrderedThenAbandoned": "Carretó carregat i abandonat",
|
1075 |
+
"VisitTypeReturning": "Habitual",
|
1076 |
+
"VisitTypeReturningCustomer": "Client habitual",
|
1077 |
+
"VisitorsCategoryHelp1": "Les pàgines de Visitants t'expliquen coses sobre qui són els teus visitants. Coses com ara d'on provenen els teus visitants, quins dispositius i navegadors fan servir i quan visiten generalment el teu lloc web. Per entendre, en conjunt, qui és el teu públic i buscar valors atípics per veure com podria créixer el teu públic.",
|
1078 |
+
"VisitorsCategoryHelp2": "A més de la informació general sobre els vostres visitants, també podeu utilitzar el %1$sRegistre de visites%2$s per veure què va passar a cada visita individual.",
|
1079 |
+
"VisitorsOverviewHelp": "La \"Visió general dels visitants\" us ajuda a entendre la popularitat del vostre lloc. Ho fa proporcionant gràfics que mostren quantes visites rep el vostre lloc durant un període seleccionat i el nivell mitjà d'interacció amb les funcions clau, com ara cerques i baixades.",
|
1080 |
"WebAnalyticsReports": "Informe d'analítica web",
|
1081 |
"YouAreUsingTheLatestVersion": "Esteu fent servir l'última versió de Matomo!",
|
1082 |
+
"YourDonationWillHelp": "La teva donació ajudarà directament a finançar noves funcions i millores per a aquesta plataforma d'anàlisi de codi obert. Això significa que la comunitat sempre es beneficiarà d'una eina que protegeixi la privadesa i us permeti mantenir el control de les vostres dades."
|
1083 |
},
|
1084 |
"CorePluginsAdmin": {
|
1085 |
+
"ActionUninstall": "Desinstal·lar",
|
1086 |
+
"Activate": "Activar",
|
1087 |
+
"ActivateTagManagerNow": "Activeu ara el Gestor d'etiquetes",
|
1088 |
+
"Activated": "Activat",
|
1089 |
"Active": "Actiu",
|
1090 |
"Activity": "Activitat",
|
1091 |
+
"AlwaysActivatedPluginsList": "Els connectors següents sempre estan activats i no es poden desactivar: %s",
|
1092 |
+
"AreThereAnyRisks": "Hi ha cap risc?",
|
1093 |
+
"AreThereAnyRisksDetails1": "Quan activeu el Gestor d'etiquetes, els usuaris amb accés d'administrador podran crear etiquetes HTML personalitzades, activadors i variables que poden executar JavaScript al vostre lloc web. Aquestes plantilles personalitzades es podrien utilitzar malament per robar, per exemple, informació confidencial dels visitants del vostre lloc web (coneguda com a %1$sXSS%2$s).",
|
1094 |
+
"AreThereAnyRisksDetails2": "Podeu desactivar aquestes plantilles personalitzades a \"Administració => Configuració general\" un cop hàgiu activat el Gestor d'etiquetes. Alternativament, també podeu restringir l'ús d'aquestes plantilles només a usuaris específics o superusuaris.",
|
1095 |
+
"AuthorHomepage": "Pàgina d'inici de l'autor",
|
1096 |
+
"ChangeLookByManageThemes": "Podeu canviar l'aspecte de Matomo a %1$sGestió dels temes%2$s.",
|
1097 |
+
"ChangeSettingsPossible": "Podeu canviar %1$sla configuració%2$s per a aquest connector.",
|
1098 |
+
"Changelog": "Registre de canvis",
|
1099 |
+
"CommunityContributedPlugin": "Aquest és un connector aportat per la comunitat, ofert de franc.",
|
1100 |
+
"ConsiderDonating": "Penseu en donar",
|
1101 |
+
"ConsiderDonatingCreatorOf": "Considereu fer una donació al creador de %s",
|
1102 |
+
"CorePluginTooltip": "Els complements nuclears no tenen versió ja que es distribueixen amb Matomo.",
|
1103 |
+
"Deactivate": "Desactivar",
|
1104 |
+
"DoMoreContactPiwikAdmins": "Per instal·lar un connector nou o un tema nou, poseu-vos en contacte amb els vostres administradors de Matomo.",
|
1105 |
+
"FileExceedsUploadLimit": "El fitxer seleccionat supera el límit de càrrega del vostre servidor.",
|
1106 |
+
"History": "Història",
|
1107 |
"Inactive": "Inactiu",
|
1108 |
+
"InfoPluginUpdateIsRecommended": "Actualitzeu ara els vostres connectors per aprofitar les últimes millores.",
|
1109 |
+
"InfoThemeIsUsedByOtherUsersAsWell": "Nota: els altres %1$s usuaris registrats en aquest Matomo també estan utilitzant el tema %2$s.",
|
1110 |
+
"InfoThemeUpdateIsRecommended": "Actualitza els teus temes per gaudir de la darrera versió.",
|
1111 |
+
"InstallNewPlugins": "Instal·leu nous connectors",
|
1112 |
+
"InstallNewThemes": "Instal·leu nous temes",
|
1113 |
+
"InstalledPlugins": "Connectors instal·lats",
|
1114 |
+
"InstalledThemes": "Temes instal·lats",
|
1115 |
+
"InstallingNewPluginViaMarketplaceOrUpload": "Podeu instal·lar connectors automàticament des del Marketplace o %1$scarregar un connector%2$s en format .zip.",
|
1116 |
+
"LicenseHomepage": "Pàgina d'inici de la llicència",
|
1117 |
+
"LikeThisPlugin": "Us agrada aquest connector?",
|
1118 |
+
"MenuPlatform": "Plataforma",
|
1119 |
+
"MissingRequirementsNotice": "Si us plau, actualitzeu %1$s %2$s a una versió més nova, %1$s %3$s és necessari.",
|
1120 |
+
"MissingRequirementsPleaseInstallNotice": "Si us plau instal·leu %1$s %2$s, ja que %3$s ho necessita.",
|
1121 |
+
"NoPluginSettings": "No hi ha cap paràmetre del connector que es pugui configurar",
|
1122 |
+
"NoZipFileSelected": "Seleccioneu un fitxer ZIP.",
|
1123 |
+
"NotDownloadable": "No es pot descarregar",
|
1124 |
+
"NumUpdatesAvailable": "%s actualitzacions disponibles",
|
1125 |
+
"OncePluginIsInstalledYouMayActivateHere": "Un cop instal·lat un connector, podeu activar-lo o desactivar-lo aquí.",
|
1126 |
+
"Origin": "Origen",
|
1127 |
+
"OriginCore": "Nucli",
|
1128 |
+
"OriginOfficial": "Oficial",
|
1129 |
+
"OriginThirdParty": "Tercers",
|
1130 |
+
"PluginActivated": "Connector activat",
|
1131 |
+
"PluginHomepage": "Pàgina d'inici del connector",
|
1132 |
+
"PluginNotCompatibleWith": "El connector %1$s no és compatible amb %2$s.",
|
1133 |
+
"PluginNotDownloadable": "El connector no es pot descarregar.",
|
1134 |
+
"PluginNotDownloadablePaidReason": "Els possibles motius són una llicència caducada o superada.",
|
1135 |
+
"PluginNotFound": "No s'ha trobat el connector %1$s al sistema de fitxers.",
|
1136 |
+
"PluginNotFoundAlternative": "Si heu estat utilitzant aquest connector, proveu de tornar-lo a carregar o a instal·lar-lo des del mercat. Si no, feu clic a desinstal·lar per eliminar-lo de la llista.",
|
1137 |
+
"PluginNotWorkingAlternative": "Si heu estat utilitzant aquest connector potser en podeu trobar una versió més recent al Marketplace. Si no, potser voldreu desinstal·lar-lo.",
|
1138 |
+
"PluginRequirement": "%1$s necessita %2$s.",
|
1139 |
+
"PluginRequiresInternet": "Aquest connector requereix una connexió a Internet que funcioni. Comproveu el vostre valor de configuració per a `enable_internet_features` si voleu utilitzar aquesta funció.",
|
1140 |
+
"PluginsExtendPiwik": "Els connectors amplien i augmenten la funcionalitat de Matomo.",
|
1141 |
"PluginsManagement": "Gestiona els connectors",
|
1142 |
"Status": "Estat",
|
1143 |
+
"SuccessfullyActicated": "Heu activat correctament <strong>%s<\/strong>.",
|
1144 |
+
"TagManagerEmailSuperUserToActivate": "Envieu un correu electrònic als superusuaris per activar aquesta nova funció",
|
1145 |
+
"TagManagerLearnMoreInUserGuide": "Més informació a la Guia d'usuari del Gestor d'etiquetes",
|
1146 |
+
"TagManagerNowAvailableSubtitle": "Gestioneu totes les vostres etiquetes fàcilment a través d'una plataforma per obtenir la informació que voleu, les oportunitats són infinites!",
|
1147 |
+
"TagManagerNowAvailableTitle": "El gestor d'etiquetes de Matomo ja està disponible",
|
1148 |
+
"TagManagerTeaserEmailSuperUserBody": "Bones,%1$sMatomo Tag Manager ja està disponible a Matomo i m'encantaria utilitzar aquesta nova funció. Com que teniu accés de superusuari, podríeu activar aquesta funció a través de la pàgina Gestor d'etiquetes al menú superior?%2$sL'URL de Matomo és %3$s.%4$sGràcies",
|
1149 |
+
"TagManagerTeaserHideNonSuperUser": "No m'interessa, no tornis a mostrar aquesta pàgina",
|
1150 |
+
"TagManagerTeaserHideSuperUser": "No mostris aquesta pàgina a cap usuari",
|
1151 |
+
"TeaserExtendPiwik": "Amplieu Matomo amb connectors i temes",
|
1152 |
+
"TeaserExtendPiwikByPlugin": "Amplieu Matomo %1$sinstal·lant connectors des del Marketplace%2$s o %3$scarregueu un connector en format .zip%4$s.",
|
1153 |
+
"TeaserExtendPiwikByTheme": "Gaudeix d'un altre aspecte %1$sinstal·lant un nou tema%2$s.",
|
1154 |
+
"Theme": "Tema",
|
1155 |
+
"Themes": "Temes",
|
1156 |
+
"ThemesDescription": "Els temes poden canviar l'aspecte de la interfície d'usuari de Matomo i proporcionar una experiència visual completament nova per gaudir dels vostres informes d'anàlisi.",
|
1157 |
+
"ThemesManagement": "Gestionar els temes",
|
1158 |
+
"UninstallConfirm": "Esteu a punt de desinstal·lar un connector %s. El connector s'eliminarà completament de la vostra plataforma i no es podrà recuperar. Esteu segur que voleu fer-ho?",
|
1159 |
+
"UpdateSelected": "Actualitzar els escollits",
|
1160 |
"Version": "Versió",
|
1161 |
+
"ViewAllMarketplacePlugins": "Veure tots els connectors de Marketplace",
|
1162 |
+
"WeCouldNotLoadThePluginAsItHasMissingDependencies": "El connector %1$s no s'ha pogut carregar perquè li falten dependències: %2$s",
|
1163 |
+
"Websites": "Llocs web",
|
1164 |
+
"WhatIsTagManager": "Què és un gestor d'etiquetes?",
|
1165 |
+
"WhatIsTagManagerDetails1": "De la mateixa manera que un sistema de gestió de contingut (CMS) us ofereix tota la flexibilitat per publicar contingut per al vostre lloc web sense tenir els coneixements tècnics d'HTML\/CSS, un sistema de gestió d'etiquetes (TMS) és el vostre recurs per simplificar el procés d'inserció d'etiquetes primàries i de tercers de seguiment d'aplicacions (també conegudes com a fragments o píxels) al vostre lloc web.",
|
1166 |
+
"WhatIsTagManagerDetails2": "Suposem que voleu veure els resultats de les vostres conversions\/objectius, registres de butlletins de notícies, ginys socials, finestres emergents de sortida i campanyes de remàrqueting; el que abans era un procés altament tècnic i que consumia molt de temps, ara es fa fàcilment dins del TMS i només es necessita uns quants clics per implementar-lo.",
|
1167 |
+
"WhyUsingATagManager": "Per què un gestor d'etiquetes?",
|
1168 |
+
"WhyUsingATagManagerDetails1": "Un gestor d'etiquetes et facilita la vida! Ja no cal que espereu que un desenvolupador modifiqui cap fragment vostre o de tercers al vostre lloc web, ja que el Gestor d'etiquetes us ofereix una experiència sense estrès per fer aquests canvis i implementar el vostre lloc web vosaltres mateixos.",
|
1169 |
+
"WhyUsingATagManagerDetails2": "No podria ser més còmode i no només us permet introduir canvis al mercat més ràpidament, sinó que també en redueix el cost.",
|
1170 |
+
"WhyUsingATagManagerDetails3": "Això fa que els equips de màrqueting, els equips digitals i els informàtics estiguin contents... És un avantatge per a tots!"
|
1171 |
},
|
1172 |
"CoreUpdater": {
|
1173 |
+
"AlreadyUpToDate": "Ja està tot al dia.",
|
1174 |
+
"CheckingForPluginUpdates": "S'estan buscant noves actualitzacions de connectors",
|
1175 |
+
"ClickHereToViewSqlQueries": "Feu clic aquí per veure i copiar la llista de consultes SQL i comandes de consola que s'executaran",
|
1176 |
+
"CloudHosting": "Allotjament al núvol",
|
1177 |
+
"ConsoleCommandDescription": "Engega les actualitzacions. Utilitzeu-lo després que el nucli de Matomo o qualsevol fitxer del connector s'hagi actualitzat. Afegiu --yes per actualitzar sense confirmació.",
|
1178 |
+
"ConsoleParameterDescription": "Executeu l'actualització directament sense demanar confirmació",
|
1179 |
+
"ConsoleStartingDbUpgrade": "S'està iniciant el procés d'actualització de la base de dades ara. Això pot trigar una mica, així que tingueu paciència.",
|
1180 |
+
"ConsoleUpdateFailure": "No s'ha pogut actualitzar Matomo! Vegeu més amunt per obtenir més informació.",
|
1181 |
+
"ConsoleUpdateNoSqlQueries": "Nota: no hi ha consultes SQL ni comandes de consola per executar.",
|
1182 |
+
"ConsoleUpdateUnexpectedUserWarning": "Sembla que heu executat aquesta actualització amb l'usuari %1$s, mentre que els vostres fitxers Matomo són propietat de %2$s. \n\nPer assegurar que els fitxers Matomo siguin llegibles per l'usuari correcte, és possible que hàgiu d'executar l'ordre següent (o una ordre similar en funció de la configuració del vostre servidor):\n\n$ %3$s",
|
1183 |
+
"ConvertToUtf8mb4": "Converteix la base de dades a codificació UTF8mb4",
|
1184 |
+
"CriticalErrorDuringTheUpgradeProcess": "Error crític durant el procés d'actualització:",
|
1185 |
+
"DatabaseUpgradeRequired": "Cal actualitzar la base de dades",
|
1186 |
+
"DbUpgradeNotExecuted": "L'actualització de la base de dades no s'ha executat.",
|
1187 |
+
"DisablingIncompatiblePlugins": "S'estan desactivant els connectors incompatibles: %s",
|
1188 |
"DownloadX": "Descarrega %s",
|
1189 |
+
"DownloadingUpdateFromX": "S'està descarregant l'actualització de %s",
|
1190 |
+
"DryRun": "Nota: això és un assaig",
|
1191 |
+
"DryRunEnd": "Final de l'assaig",
|
1192 |
"EmptyDatabaseError": "La base de dades %s està buida. Heu d'editar o esborrar el fitxer de configuració del Matomo.",
|
1193 |
"ErrorDIYHelp": "Si sou un usuari avançat i trobeu un error en l'actualització de la base de dades:",
|
1194 |
"ErrorDIYHelp_1": "identifiqueu i corregiu l'origen de l'error (per exemple: memory_limit o max_execution_time)",
|
1195 |
+
"ErrorDIYHelp_2": "executeu les consultes restants a l'actualització que ha fallat",
|
1196 |
+
"ErrorDIYHelp_3": "actualitzeu manualment la taula `option' a la vostra base de dades Matomo, establint el valor de version_core a la versió de l'actualització fallida",
|
1197 |
+
"ErrorDIYHelp_4": "torneu a executar l'actualitzador (a través del navegador o de la línia de comandes) per continuar amb les actualitzacions restants",
|
1198 |
+
"ErrorDIYHelp_5": "informeu sobre el problema (i la solució) per tal de millorar Matomo",
|
1199 |
+
"ErrorDuringPluginsUpdates": "Error durant les actualitzacions del connector:",
|
1200 |
+
"ExceptionAlreadyLatestVersion": "La vostra versió de Matomo %s està actualitzada.",
|
1201 |
+
"ExceptionArchiveEmpty": "Arxiu buit.",
|
1202 |
"ExceptionArchiveIncompatible": "Arxiu incompatible: %s",
|
1203 |
+
"ExceptionArchiveIncomplete": "L'arxiu és incomplet: manquen alguns fitxers (per exemple %s).",
|
1204 |
+
"ExceptionDirWrongPermission": "Algunes carpetes no es poden escriure. Assegureu-vos que les carpetes següents es poden escriure i torneu-ho a provar: %s.",
|
1205 |
+
"ExecuteDbUpgrade": "Es requereix una actualització de la base de dades. Vols executar l'actualització?",
|
1206 |
+
"FeedbackRequest": "No dubteu a compartir les vostres idees i suggeriments amb l'equip de Matomo aquí:",
|
1207 |
+
"HelpMessageContent": "Consulteu les FAQ de %1$s Matomo %2$s que explica els errors més comuns durant l'actualització. %3$s Pregunteu al vostre administrador del sistema; és possible que us puguin ajudar amb l'error que probablement estigui relacionat amb el vostre servidor o la configuració de MySQL.",
|
1208 |
+
"HelpMessageIntroductionWhenError": "L'anterior és el missatge d'error bàsic. Hauria d'ajudar a explicar la causa, però si necessiteu més ajuda, si us plau:",
|
1209 |
"HelpMessageIntroductionWhenWarning": "La actualització s'ha completat amb èxit, però hi ha hagut alguns problemes durant el procés. Si us plau, llegiu les descripcions que hi ha a sobre per a saber més detalls. Si voleu més informació:",
|
1210 |
+
"HighTrafficPiwikServerEnableMaintenance": "Si gestioneu un servidor Matomo d'alt trànsit, us recomanem que %1$s desactiveu momentàniament el seguiment de visitants i que poseu la interfície d'usuari de Matomo en mode de manteniment%2$s.",
|
1211 |
+
"IncompatbilePluginsWillBeDisabledInfo": "Nota: alguns connectors no són compatibles amb Matomo %s. Els actualitzarem si hi ha una actualització al Marketplace, en cas contrari els desactivarem quan actualitzeu:",
|
1212 |
"InstallingTheLatestVersion": "S'està instal·lant la darrera versió",
|
1213 |
+
"LatestBetaRelease": "Darrera versió beta",
|
1214 |
+
"LatestStableRelease": "Última versió estable",
|
1215 |
+
"LatestXBetaRelease": "Darrera beta %s",
|
1216 |
+
"LatestXStableRelease": "Darrera versió estable %s",
|
1217 |
+
"ListOfSqlQueriesFYI": "FYI: aquestes són les consultes SQL i les comandes de la consola que s'executaran per actualitzar la vostra base de dades a Matomo %s",
|
1218 |
+
"LtsSupportVersion": "Versió de suport a llarg termini",
|
1219 |
+
"MajorUpdateWarning1": "Es tracta d'una actualització major! Trigarà més que de costum.",
|
1220 |
+
"MajorUpdateWarning2": "El consell següent és especialment important per a instal·lacions grans.",
|
1221 |
+
"NeedHelpUpgrading": "Necessites ajuda per actualitzar Matomo?",
|
1222 |
+
"NeedHelpUpgradingText": "Si necessiteu assistència per actualitzar el vostre Matomo, els creadors de Matomo estan aquí per ajudar-vos a fer que l'actualització de Matomo sigui un èxit i proporcionar-vos totes les instruccions, bones pràctiques i suport permanent. %1$sContacteu amb els experts de Matomo per començar a actualitzar el vostre Matomo de manera segura.%2$s",
|
1223 |
+
"NoteForLargePiwikInstances": "Notes importants per a grans instal·lacions de Matomo",
|
1224 |
+
"NotificationClickToUpdatePlugins": "Feu clic aquí per actualitzar els vostres connectors ara:",
|
1225 |
+
"NotificationClickToUpdateThemes": "Feu clic aquí per actualitzar els vostres temes ara:",
|
1226 |
+
"NotificationSubjectAvailableCoreUpdate": "Disponible la nova versió %s de Matomo",
|
1227 |
+
"NotificationSubjectAvailablePluginUpdate": "Actualitzacions disponibles per als vostres connectors de Matomo",
|
1228 |
+
"PiwikHasBeenSuccessfullyUpgraded": "Matomo s'ha actualitzat correctament!",
|
1229 |
"PiwikUpdatedSuccessfully": "El Matomo s'ha actualitzat correctament!",
|
1230 |
+
"PiwikWillBeUpgradedFromVersionXToVersionY": "La base de dades de Matomo s'actualitzarà de la versió %1$s a la nova versió %2$s.",
|
1231 |
+
"PostUpdateMessage": "Matomo sempre es podrà descarregar i utilitzar gratuïtament, però necessita el vostre suport continuat per créixer i millorar.",
|
1232 |
+
"PostUpdateSupport": "Si necessiteu ajuda amb Matomo, podeu obtenir suport dels seus creadors:",
|
1233 |
"ReadyToGo": "Preparat?",
|
1234 |
+
"ReceiveEmailBecauseIsSuperUser": "Rebeu aquest correu electrònic perquè sou un superusuari de Matomo a: %s",
|
1235 |
+
"ServicesSupport": "Serveis i Suport",
|
1236 |
+
"SkipCacheClear": "S'ha omès esborrar les memòries cau.",
|
1237 |
+
"SkipCacheClearDesc": "Omet l'esborrament de la memòria cau abans d'actualitzar. Això només és útil si podeu assegurar-vos que les instàncies que executen aquesta ordre encara no han creat una memòria cau, i si esborrar la memòria cau per a molts comptes de Matomo es pot convertir en un coll d'ampolla.",
|
1238 |
+
"ThankYouUpdatePiwik": "Gràcies per utilitzar Matomo i mantenir-lo actualitzat!",
|
1239 |
+
"TheFollowingDimensionsWillBeUpgradedX": "S'actualitzaran les dimensions següents: %s.",
|
1240 |
+
"TheFollowingPluginsWillBeUpgradedX": "S'actualitzaran els connectors següents: %s.",
|
1241 |
+
"TheUpgradeProcessMayFailExecuteCommand": "Si teniu a Matomo una base de dades molt gran les actualitzacions poden trigar molt a executar-se al navegador. En aquesta situació podeu executar les actualitzacions des de la vostra línia de comandes: %s",
|
1242 |
+
"TheUpgradeProcessMayTakeAWhilePleaseBePatient": "El procés d'actualització de la base de dades pot trigar una mica, tingueu paciència.",
|
1243 |
+
"ThereIsNewPluginVersionAvailableForUpdate": "Alguns connectors que feu servir s'han actualitzat al Marketplace:",
|
1244 |
+
"ThereIsNewVersionAvailableForUpdate": "Hi ha una nova versió de Matomo disponible per actualitzar",
|
1245 |
+
"TheseCommandsWillBeExecuted": "Aquestes ordres de consola s'executaran:",
|
1246 |
+
"TheseSqlQueriesWillBeExecuted": "S'executarà aquestes consultes SQL:",
|
1247 |
+
"TriggerDatabaseConversion": "Activa la conversió de la base de dades en segon pla",
|
1248 |
+
"UnpackingTheUpdate": "Desempaquetant l'actualització",
|
1249 |
"UpdateAutomatically": "Actualitza automàticament",
|
1250 |
+
"UpdateErrorTitle": "Error d'actualització",
|
1251 |
+
"UpdateHasBeenCancelledExplanation": "L'actualització d'un clic de Matomo s'ha cancel·lat. Si no podeu solucionar el missatge d'error anterior, us recomanem que actualitzeu Matomo manualment. %1$s Consulteu la %2$sdocumentació d'actualització%3$s per començar!",
|
1252 |
+
"UpdateLog": "Actualitzar el registre",
|
1253 |
+
"UpdateSuccessTitle": "Matomo s'ha actualitzat correctament!",
|
1254 |
+
"UpdateTitle": "Actualització",
|
1255 |
+
"UpdateUsingHttpsFailed": "No s'ha pogut descarregar la darrera versió de Matomo mitjançant una connexió HTTPS segura a causa del següent error:",
|
1256 |
+
"UpdateUsingHttpsFailedHelp": "Per què ha fallat? La descàrrega de la darrera versió de Matomo (a través d'una connexió HTTPS segura) pot fallar per diversos motius, per exemple a causa d'un error de xarxa, una velocitat de xarxa lenta o una configuració incorrecta del sistema. Tingueu en compte que també podria significar que el vostre servidor és l'objectiu d'un atac MITM i algú està intentant substituir l'actualització per una versió maliciosa de Matomo.",
|
1257 |
+
"UpdateUsingHttpsFailedHelpWhatToDo": "Es recomana tornar a provar la descàrrega mitjançant la connexió HTTPS segura, ja que evita atacs MITM.",
|
1258 |
+
"Updating": "Actualitzant",
|
1259 |
+
"UpdatingPluginXToVersionY": "S'està actualitzant el connector %1$s a la versió %2$s",
|
1260 |
+
"UpgradeComplete": "Actualització llesta!",
|
1261 |
+
"UpgradePiwik": "Actualitza Matomo",
|
1262 |
+
"UsingHttp": "utilitzant la connexió HTTP no segura",
|
1263 |
+
"UsingHttps": "utilitzant la connexió HTTPS segura (recomanat)",
|
1264 |
+
"Utf8mb4ConversionHelp": "La vostra base de dades no està utilitzant el conjunt de caràcters utf8mb4. Això fa que sigui impossible emmagatzemar caràcters de 4 bytes, com ara emojis, caràcters menys comuns de llengües asiàtiques, diverses escriptures històriques o símbols matemàtics. Actualment es substitueixen per %1$s.<br><br>La vostra base de dades admet el conjunt de caràcters utf8mb4 i seria possible convertir-lo.<br><br>Si podeu executar les ordres de la consola, recomanem que utilitzeu aquesta ordre: %2$s<br><br>Com alternativa, podeu activar la conversió aquí. Aleshores s'activarà automàticament com una tasca programada en segon pla.<br><br>Atenció: la conversió de la base de dades pot trigar fins a un parell d'hores depenent de la mida de la base de dades. Com que el seguiment pot no funcionar durant aquest procés, no us recomanem que utilitzeu l'activador per a instàncies més grans.<br><br>Podeu trobar més informació sobre aquest tema en aquestes %3$sFAQ%4$s.",
|
1265 |
+
"VerifyingUnpackedFiles": "Verificació dels fitxers descomprimits",
|
1266 |
+
"ViewVersionChangelog": "Consulteu el registre de canvis d'aquesta versió:",
|
1267 |
+
"WarningMessages": "Missatges d'advertència:",
|
1268 |
+
"WeAutomaticallyDeactivatedTheFollowingPlugins": "Hem desactivat automàticament els connectors següents: %s",
|
1269 |
+
"YouCanUpgradeAutomaticallyOrDownloadPackage": "Podeu actualitzar a la versió %s automàticament o descarregar el paquet i instal·lar-lo manualment:",
|
1270 |
+
"YouMustDownloadPackageOrFixPermissions": "Matomo no pot sobreescriure la vostra instal·lació actual. Podeu arreglar els permisos del directori\/fitxer o descarregar el paquet i instal·lar la versió %s manualment:",
|
1271 |
+
"YourDatabaseIsOutOfDate": "La vostra base de dades Matomo és antiga i s'ha d'actualitzar abans de poder continuar."
|
1272 |
+
},
|
1273 |
+
"CustomDimensions": {
|
1274 |
+
"CannotBeDeleted": "Una dimensió personalitzada no es pot suprimir, només es pot desactivar.",
|
1275 |
+
"ColumnAvgTimeOnDimension": "Temps mitjà a la dimensió",
|
1276 |
+
"ColumnUniqueActions": "Accions úniques",
|
1277 |
+
"ConfigureDimension": "Configura la %1$s dimensió personalitzada %2$s",
|
1278 |
+
"ConfigureNewDimension": "Configureu una nova dimensió",
|
1279 |
+
"CustomDimensionId": "Dimensió personalitzada (Id %d)",
|
1280 |
+
"CustomDimensions": "Dimensions personalitzades",
|
1281 |
+
"CustomDimensionsIntro": "En creant %1$sDimensions personalitzades%2$s podeu recollir qualsevol dada personalitzada per a \"%3$s\".",
|
1282 |
+
"CustomDimensionsIntroNext": "Matomo crearà un informe per a cada dimensió personalitzada (incloent-hi el percentatge de conversió de cadascun dels vostres objectius), a més de permetre segmentar fàcilment els usuaris en funció d'aquests valors. Les dimensions personalitzades són semblants a les %1$svariables personalitzades%2$s, però hi ha unes quantes %3$sdiferències entre les dimensions personalitzades i les variables personalitzades%4$s.",
|
1283 |
+
"DimensionCreated": "Dimensió personalitzada creada",
|
1284 |
+
"DimensionUpdated": "Dimensió personalitzada actualitzada",
|
1285 |
+
"EmptyValue": "valor buit",
|
1286 |
+
"ExampleCreateCustomDimensions": "Per exemple, per crear %s noves dimensions personalitzades a l'acció d'abast, executeu l'ordre següent:",
|
1287 |
+
"ExampleValue": "valordimensió",
|
1288 |
+
"ExceptionDimensionDoesNotExist": "No existeix la dimensió %1$d per al lloc web %2$d.",
|
1289 |
+
"ExceptionDimensionIsNotActive": "La dimensió %1$d per al lloc web %2$d no està activa.",
|
1290 |
+
"ExtractValue": "Extreure valor",
|
1291 |
+
"Extractions": "Extraccions",
|
1292 |
+
"ExtractionsHelp": "Això és opcional. Es pot utilitzar una expressió regular per extreure automàticament el valor d'aquesta dimensió personalitzada d'una URL o d'un títol de pàgina. D'aquesta manera, el valor de la dimensió personalitzada no s'ha d'establir manualment mitjançant un client de seguiment. Un valor encara es pot establir manualment mitjançant l'API Matomo Tracker. Els valors de dimensions establerts manualment als clients de seguiment sempre tenen prioritat sobre les extraccions. Si es defineixen diverses extraccions, s'utilitza la primera extracció que coincideixi. No necessiteu escapar de les barres inclinades, ja que Matomo ho fa automàticament. Per exemple, utilitzeu \/news\/ en comptes de \\\/news\\\/.",
|
1293 |
+
"HowToCreateCustomDimension": "Per crear una nova dimensió personalitzada, executeu l'ordre següent a la vostra instal·lació de Matomo:",
|
1294 |
+
"HowToManyCreateCustomDimensions": "Si voleu crear diverses dimensions personalitzades noves alhora, només cal que afegiu el nombre de dimensions que es crearan. Com que tots els canvis de la base de dades s'executaran en una sola instrucció, és possible que no trigui gaire més a afegir diverses dimensions personalitzades alhora.",
|
1295 |
+
"HowToTrackManuallyTitle": "Seguiment d'un valor per a aquesta dimensió manualment",
|
1296 |
+
"HowToTrackManuallyViaHttp": "Per fer el seguiment d'un valor mitjançant l'API de seguiment HTTP, utilitzeu el paràmetre de seguiment \"dimensió\" seguit de l'identificador de dimensió personalitzada:",
|
1297 |
+
"HowToTrackManuallyViaJs": "Per fer el seguiment d'un valor al rastrejador de JavaScript crideu:",
|
1298 |
+
"HowToTrackManuallyViaJsDetails": "Per obtenir més informació llegiu la %1$sguia de seguiment de JavaScript per a les dimensions personalitzades%2$s",
|
1299 |
+
"HowToTrackManuallyViaPhp": "Per fer un seguiment d'un valor al PHP Tracker crideu:",
|
1300 |
+
"IncreaseAvailableCustomDimensionsTakesLong": "La creació d'una nova dimensió personalitzada pot trigar molt de temps en funció de la mida de la base de dades, ja que requereix canvis d'esquema a la base de dades. Per tant només és possible fer-ho mitjançant una ordre de consola que s'ha d'executar a la línia de comandes.",
|
1301 |
+
"IncreaseAvailableCustomDimensionsTitle": "Augmenteu el nombre de dimensions personalitzades disponibles",
|
1302 |
+
"NameAllowedCharacters": "Els caràcters permesos són qualsevol lletra, nombre, espai en blanc, guió i subratllat.",
|
1303 |
+
"NameIsRequired": "Es necessita un nom.",
|
1304 |
+
"NameIsTooLong": "El nom conté massa caràcters, utilitzeu fins a %d caràcters.",
|
1305 |
+
"NoCustomDimensionConfigured": "Encara no s'ha configurat cap dimensió personalitzada, configureu-ne una ara.",
|
1306 |
+
"NoValue": "cap valor",
|
1307 |
+
"PageUrlParam": "Paràmetre de la URL de la pàgina",
|
1308 |
+
"PluginDescription": "Amplieu Matomo a les vostres necessitats mitjançant la definició i el seguiment de dimensions personalitzades a l'abast Acció o Visita",
|
1309 |
+
"ScopeDescriptionAction": "Les dimensions personalitzades de l'àmbit \"Acció\" es poden enviar amb qualsevol acció (visualització de la pàgina, baixada, esdeveniment, etc.).",
|
1310 |
+
"ScopeDescriptionActionMoreInfo": "Les extraccions es poden definir de manera que el valor de la dimensió personalitzada s'extregui de l'URL de la pàgina, del títol de la pàgina o d'un paràmetre de consulta de l'URL de la pàgina.",
|
1311 |
+
"ScopeDescriptionVisit": "Les dimensions personalitzades a l'àmbit \"Visita\" es poden enviar amb qualsevol sol·licitud de seguiment i s'emmagatzemen a la visita.",
|
1312 |
+
"ScopeDescriptionVisitMoreInfo": "Si establiu valors diferents per a una dimensió determinada durant la vida útil d'una visita, s'utilitzarà l'últim valor establert.",
|
1313 |
+
"UrlQueryStringParameter": "paràmetre de cadena de consulta d'url",
|
1314 |
+
"XofYLeft": "Queden %1$s de %2$s dimensions"
|
1315 |
+
},
|
1316 |
+
"CustomJsTracker": {
|
1317 |
+
"DiagnosticPiwikJsMakeWritable": "Us recomanem que %1$s es pugui escriure executant aquesta ordre: %2$s",
|
1318 |
+
"DiagnosticPiwikJsNotWritable": "El fitxer de seguiment de JavaScript de Matomo %s no es pot escriure, cosa que significa que altres connectors no poden estendre el seguiment de JavaScript. En el futur fins i tot algunes funcions bàsiques podrien no funcionar com s'espera.",
|
1319 |
+
"DiagnosticPiwikJsWritable": "Seguiment de JavaScript que es pot escriure (%s)",
|
1320 |
+
"PluginDescription": "Permet a qualsevol connector ampliar el fitxer de seguiment de JavaScript de Matomo (matomo.js) i afegir noves funcionalitats i capacitats de mesurament de llocs web."
|
1321 |
},
|
1322 |
"DBStats": {
|
|
|
|
|
1323 |
"DBSize": "Mida de la BD",
|
1324 |
+
"DataSize": "Grandària de les dades",
|
1325 |
+
"DatabaseUsage": "Ús de la base de dades",
|
1326 |
"EstimatedSize": "Mida estimada",
|
1327 |
"IndexSize": "Grandària del l'índex",
|
1328 |
"LearnMore": "Per obtenir més informació sobre com el Matomo procesa la informació i com fer que el Matomo funcioni correctament en llocs amb un tràfic mitja o elevat, consulteu la següent documentació: %s.",
|
1329 |
"MainDescription": "El Matomo desa totes les anàlisis web la base de dades MySQL. Ara per ara, les taules del Matomo fan servir %s.",
|
1330 |
+
"MetricDataByYear": "Taules de mètriques per any",
|
1331 |
"MetricTables": "Taules de mètriques",
|
1332 |
"OtherTables": "Altres taules",
|
1333 |
+
"PluginDescription": "Proporciona informes detallats d'ús de la base de dades MySQL. Disponible per a Superusuaris a Diagnòstics.",
|
1334 |
"ReportDataByYear": "Taules d'informes per any",
|
1335 |
"ReportTables": "Taules d'informes",
|
1336 |
"RowCount": "Nombre de files",
|
1345 |
"CopyDashboardToUser": "Copiar tauler a l'usuari",
|
1346 |
"CreateNewDashboard": "Crear un nou tauler",
|
1347 |
"Dashboard": "Tauler",
|
1348 |
+
"DashboardCategoryHelp": "Aquesta és una pàgina de tauler. Els taulers de control són una col·lecció de ginys de Matomo per afegir tu mateix per adaptar-los a les teves necessitats específiques. Barreja i combina qualsevol dels widgets de Matomo per obtenir les dades que %1$s*tu*%2$s necessites veure d'un cop d'ull.",
|
1349 |
+
"DashboardCopied": "El tauler de control actual s'ha copiat correctament a l'usuari seleccionat.",
|
1350 |
"DashboardEmptyNotification": "El vostre tauler no conté cap giny. Comenceu per afegir alguns ginys o restablieu el tauler a la selecció de ginys per defecte.",
|
1351 |
"DashboardName": "Nom del tauler:",
|
1352 |
"DashboardOf": "Tauler de %s",
|
1357 |
"ManageDashboard": "Administrar tauler",
|
1358 |
"Maximise": "Maximitza",
|
1359 |
"Minimise": "Minimitza",
|
1360 |
+
"NotUndo": "No podreu desfer aquesta operació.",
|
1361 |
"PluginDescription": "El teu taulell d'analítica web. Personalitza el teu taulell afegint nous ginys, arrossega i solta per a moure'ls i canvia l'estructura de columnes. Cada usuari pot tenir el seu taulell personalitzat.",
|
1362 |
"RemoveDashboard": "Elimina el tauler",
|
1363 |
"RemoveDashboardConfirm": "Esteu segurs que voleu eliminar el tauler \"%s\"?",
|
1364 |
+
"RemoveDefaultDashboardNotPossible": "El tauler predeterminat no es pot eliminar",
|
1365 |
"RenameDashboard": "Reanomena el tauler",
|
1366 |
"ResetDashboard": "Reinicialitza el tauler",
|
1367 |
"ResetDashboardConfirm": "Esteu segurs que voleu reiniciar la disposició del vostre tauler a la selecció de ginys per defecte?",
|
1368 |
"SelectDashboardLayout": "Seleccioneu la nova disposició del vostre tauler",
|
1369 |
"SelectWidget": "Escolliu el giny que voleu afegir a la consola",
|
1370 |
+
"SetAsDefaultWidgets": "Estableix com a selecció de widgets per defecte",
|
1371 |
"SetAsDefaultWidgetsConfirm": "Esteu segurs que voleu definir la selecció de ginys i la disposició del tauler actuals per a la plantilla de tauler per defecte?",
|
1372 |
"SetAsDefaultWidgetsConfirmHelp": "Aquesta selecció de ginys i la disposició de columnes del tauler es faran servir quan qualsevol usuari crei un nou tauler o quan s'utiltiza la funció \"%s\".",
|
1373 |
"TopLinkTooltip": "Mostra els informes d'analítica web per %s.",
|
1377 |
"DevicePlugins": {
|
1378 |
"BrowserWithNoPluginsEnabled": "%1$s sense connectors activats",
|
1379 |
"BrowserWithPluginsEnabled": "%1$s amb els connectors %2$s activats",
|
1380 |
+
"PluginDescription": "Informa de la llista de connectors compatibles amb els navegadors dels visitants.",
|
1381 |
+
"PluginDetectionDoesNotWorkInIE": "Nota: la detecció de connectors no funciona a Internet Explorer abans de l'11. Aquest informe només es basa en navegadors que no són IE i en versions més noves d'IE.",
|
1382 |
"WidgetPlugins": "Llistat de connectors",
|
1383 |
"WidgetPluginsDocumentation": "Aquest informe mostra quins connectors tenen els vostres visitants activades. Aquesta informació pot ser important per determinar la forma correcta de mostrar el contingut."
|
1384 |
},
|
1385 |
"DevicesDetection": {
|
1386 |
+
"BotDetected": "Aquest agent d'usuari es detecta com a %1$s. Les visites d'aquest agent d'usuari no seran seguides a Matomo de manera predeterminada.",
|
1387 |
+
"BrowserCode": "Codi de navegador",
|
1388 |
"BrowserEngine": "Navegador",
|
1389 |
"BrowserEngineDocumentation": "Aquest gràfic mostra els navegadors dels vostres visitants dividits en famílies. %s La informació més important per als desenvolupadors web es quin tipus de sistema de renderització estan utilitzant els seus visitants. Les etiquetiquetes contenen els noms dels sistemes, seguit pel navegador més comú utilitzant aquest sistema.",
|
1390 |
"BrowserEngines": "motors de navegació",
|
1391 |
"BrowserFamily": "Família del navegador",
|
|
|
1392 |
"BrowserVersion": "Versió del navegador",
|
1393 |
"BrowserVersions": "versions del navegador",
|
1394 |
+
"Browsers": "Navegadors",
|
1395 |
"Camera": "càmera",
|
1396 |
"CarBrowser": "navegador de cotxe",
|
1397 |
+
"ClientType": "Tipus de client",
|
1398 |
+
"ClientTypes": "Tipus de clients",
|
1399 |
"ColumnBrowser": "Navegador",
|
1400 |
"ColumnOperatingSystem": "Sistema operatiu",
|
1401 |
"ColumnOperatingSystemVersion": "Versió del sistema operatiu",
|
1402 |
"Console": "Consola",
|
|
|
|
|
|
|
|
|
1403 |
"Device": "Dispositiu",
|
1404 |
"DeviceBrand": "Marca del dispositiu",
|
1405 |
+
"DeviceBrandReportDocumentation": "Aquest informe mostra les marques\/fabricants dels dispositius que han utilitzat els vostres visitants. En la majoria dels casos aquesta informació només està disponible per a dispositius que no són d'escriptori.",
|
1406 |
"DeviceBrands": "Marques de dispositius",
|
1407 |
"DeviceDetection": "Detecció de dispositius",
|
1408 |
"DeviceModel": "Model del dispositiu",
|
1409 |
+
"DeviceModelReportDocumentation": "Aquest informe mostra els dispositius que fan servir els vostres visitants. Cada model es mostra combinat amb la marca del dispositiu ja que alguns noms de models són utilitzats per diverses marques.",
|
1410 |
"DeviceModels": "Models de dispositiu",
|
|
|
1411 |
"DeviceType": "Tipus de dispositiu",
|
1412 |
+
"DeviceTypeReportDocumentation": "Aquest informe mostra els tipus de dispositius que han utilitzat els vostres visitants. Aquest informe mostrarà sempre tots els tipus de dispositius que Matomo pugui detectar, encara que no hi hagi hagut visites amb un tipus específic.",
|
1413 |
"DeviceTypes": "Tipus de dispositius",
|
1414 |
+
"Devices": "Dispositius",
|
1415 |
+
"DevicesDetection": "Dispositius del visitant",
|
1416 |
"FeaturePhone": "Característiques del telèfon",
|
1417 |
+
"FeedReader": "Lector de notícies",
|
1418 |
+
"GenericDevice": "Genèric %s",
|
1419 |
+
"Library": "Biblioteca",
|
1420 |
+
"MediaPlayer": "Reproductor multimèdia",
|
1421 |
+
"MobileApp": "Aplicació mòbil",
|
1422 |
+
"MobileDevice": "Dispositiu mòbil",
|
1423 |
+
"OperatingSystemCode": "Codi de sistema operatiu",
|
1424 |
"OperatingSystemFamilies": "Famílies del sistema operatiu",
|
1425 |
+
"OperatingSystemFamiliesReportDocumentation": "Aquest informe us mostra els sistemes operatius que utilitzen els vostres visitants agrupats per família de sistemes operatius. Una família de sistemes operatius consta de diferents versions o distribucions.",
|
1426 |
"OperatingSystemFamily": "Família del Sistema Operatiu",
|
|
|
1427 |
"OperatingSystemVersions": "Versions del sistema operatiu",
|
1428 |
+
"OperatingSystemVersionsReportDocumentation": "Aquest informe us mostra els sistemes operatius que utilitzen els vostres visitants. Cada versió i distribució es mostra per separat.",
|
1429 |
+
"OperatingSystems": "Sistemes operatius",
|
1430 |
+
"Peripheral": "Perifèric",
|
1431 |
+
"Phablet": "Taulèfon",
|
1432 |
+
"Pim": "PIM",
|
1433 |
"PluginDescription": "Proporciona informació extesa sobre els dispositius dels usuaris, tals com marca (fabricant), model (versió del dispositiu), tipus de dispositiu (tv, consola, telèfon intel·ligent, d'escriptori, etc.) i més.",
|
1434 |
+
"PortableMediaPlayer": "Reproductor de medis portàtils",
|
1435 |
"SmartDisplay": "Pantalla intel·ligent",
|
1436 |
+
"SmartSpeaker": "Altaveu intel·ligent",
|
1437 |
"Smartphone": "Telèfon intel·ligent",
|
1438 |
+
"Software": "Software",
|
|
|
|
|
|
|
|
|
|
|
1439 |
"TV": "Televisió",
|
1440 |
+
"Tablet": "Tauleta",
|
1441 |
"UserAgent": "Agent d'usuari",
|
1442 |
+
"Wearable": "Portàtil",
|
1443 |
+
"WidgetBrowserVersionsDocumentation": "Aquest informe conté informació sobre quin tipus de navegador està utilitzant els vostres visitants. Cada versió del navegador es llista per separat.",
|
1444 |
"WidgetBrowsers": "Navegadors",
|
1445 |
+
"WidgetBrowsersDocumentation": "Aquest informe conté informació sobre quin tipus de navegador estaven utilitzant els vostres visitants.",
|
1446 |
+
"XVisitsFromDevices": "%1$s de visites provenen de %2$s dispositius",
|
1447 |
+
"dataTableLabelBrands": "Marca",
|
1448 |
+
"dataTableLabelModels": "Model",
|
1449 |
+
"dataTableLabelSystemVersion": "Versió del sistema operatiu",
|
1450 |
+
"dataTableLabelTypes": "Tipus"
|
1451 |
+
},
|
1452 |
+
"Diagnostics": {
|
1453 |
+
"AllPrivateDirectoriesAreInaccessible": "Tots els directoris privats són inaccessibles des d'Internet.",
|
1454 |
+
"BrowserAndAutoArchivingEnabledComment": "Sembla que tant el navegador com l'arxivat automàtic estan habilitats. L'arxivat automàtic es va iniciar per última vegada fa %3$s. Si %1$sauto arxivat%2$s està habilitat, hauríeu de desactivar l'arxivat del navegador a \"Configuració general\".",
|
1455 |
+
"BrowserAndAutoArchivingEnabledLabel": "Navegador i arxivat automàtic activats",
|
1456 |
+
"BrowserTriggeredArchivingEnabled": "Per obtenir un rendiment òptim i un Matomo ràpid, és molt recomanable configurar un crontab per arxivar automàticament els vostres informes i desactivar l'activació del navegador a la configuració de Matomo. %1$sMés informació.%2$s",
|
1457 |
+
"ConfigFileIntroduction": "Aquí podeu veure la configuració de Matomo. Si esteu executant Matomo en un entorn de càrrega equilibrada, la pàgina pot ser diferent segons el servidor des del qual es carregui aquesta pàgina. Les files amb un color de fons diferent són valors de configuració canviats que s'especifiquen, per exemple, al fitxer %1$s.",
|
1458 |
+
"ConfigFileTitle": "Arxiu de configuració",
|
1459 |
+
"ConfigIniAccessible": "També hem trobat que el directori de configuració de Matomo és accessible públicament. Tot i que els atacants no poden llegir la configuració ara, si el vostre servidor web deixa d'executar fitxers PHP per algun motiu, les vostres credencials de MySQL i altra informació estaran disponibles per a qualsevol. Comproveu la configuració del vostre servidor web i denegueu l'accés a aquest directori.",
|
1460 |
+
"CronArchivingHasNotRun": "L'arxivat encara no s'ha executat amb èxit.",
|
1461 |
+
"CronArchivingHasNotRunInAWhile": "La darrera vegada que es va arxivar amb èxit fou el %1$s, fa %2$s.",
|
1462 |
+
"CronArchivingLastRunCheck": "Darrer arxivat completat amb èxit",
|
1463 |
+
"CronArchivingRanSuccessfullyXAgo": "El procés d'arxivat es va completar amb èxit fa %1$s.",
|
1464 |
+
"CronArchivingRunDetails": "Si us plau comproveu que heu configurat un crontab que crida l'ordre de la consola %1$s i que heu configurat un %2$s per rebre errors per correu electrònic si falla l'arxivat. També podeu provar d'executar l'ordre de la consola per arxivar els vostres informes manualment: %3$s. %4$sMés informació.%5$s",
|
1465 |
+
"DatabaseReaderConnection": "Connexió del lector de bases de dades",
|
1466 |
+
"DatabaseUtf8Requirement": "Això és necessari per poder emmagatzemar caràcters UTF8 de 4 bytes. A menys que utf8mb4 estigui disponible els caràcters especials, com ara emojis, caràcters menys comuns d'idiomes asiàtics, diversos scripts històrics o símbols matemàtics es substituiran per %1$s. Podeu llegir més detalls sobre aquest tema a %2$saquest FAQ%3$s.",
|
1467 |
+
"DatabaseUtf8mb4CharsetAvailableButNotUsed": "La vostra base de dades admet el conjunt de caràcters utf8mb4, però les taules de la vostra base de dades encara no s'han convertit. Podeu fer-ho executant l'ordre %1$s o activant la conversió automàtica a la configuració general.",
|
1468 |
+
"DatabaseUtf8mb4CharsetRecommended": "La vostra base de dades encara no és compatible amb el conjunt de caràcters utf8mb4.",
|
1469 |
+
"EnableRequiredDirectoriesDiagnostic": "Aquesta comprovació s'ha omès perquè aquesta comprovació està desactivada a la configuració. Per habilitar aquesta comprovació, establiu [General] enable_required_directories_diagnostic = 1 al fitxer \"config\/config.ini.php\".",
|
1470 |
+
"HideUnchanged": "Si voleu veure només els valors canviats, podeu %1$samagar tots els valors sense canvis%2$s.",
|
1471 |
+
"HtaccessWarningNginx": "Per garantir que no es pot accedir directament als fitxers sensibles, es recomana configurar el servidor web per restringir l'accés a determinats directoris. Per obtenir més informació, consulteu %1$sla configuració oficial del servidor nginx%2$s",
|
1472 |
+
"MysqlMaxPacketSize": "Mida màxima del paquet",
|
1473 |
+
"MysqlMaxPacketSizeWarning": "Es recomana configurar una mida 'max_allowed_packet' a la vostra base de dades MySQL d'almenys %1$s. La configuració actualment és %2$s.",
|
1474 |
+
"MysqlTemporaryTablesWarning": "És necessari el permís de MySQL CREATE TEMPORARY TABLES perquè el Matomo funcioni correctament.",
|
1475 |
+
"MysqlTransactionLevel": "No s'admet el canvi del nivell d'aïllament de la transacció. L'arxivat seguirà funcionant, però pot ser més lent i es recomana canviar, per exemple, el `binlog_format` a `row` si és possible.",
|
1476 |
+
"NoDataForReportArchivingNotRun": "L'arxivat dels vostres informes no s'ha executat recentment, %1$sobteniu més informació sobre com generar els vostres informes.%2$s",
|
1477 |
+
"PHPFPMWarningApache": "PHP FPM ignorarà les regles .htaccess per als fitxers .php. Per assegurar que no es pot accedir directament als fitxers sensibles, es recomana excloure determinats directoris de ser gestionats per PHP FPM afegint la línia %1$s a la secció %2$s a la configuració d'hoste virtual d'Apache just a sobre de la línia %3$s.",
|
1478 |
+
"PHPFPMWarningGeneric": "PHP FPM pot ignorar les regles .htaccess per als fitxers .php. Per assegurar que no es pot accedir directament als fitxers sensibles, es recomana configurar el servidor web per excloure el directori \/config de ser gestionat per PHP FPM.",
|
1479 |
+
"PHPFPMWarningNginx": "PHP FPM ignorarà les regles .htaccess per als fitxers .php. Per assegurar que no es pot accedir directament als fitxers sensibles, es recomana excloure determinats directoris de ser gestionats per PHP FPM. Per obtenir més informació, consulteu %1$sla configuració oficial del servidor nginx%2$s",
|
1480 |
+
"PrivateDirectoryInternetDisabled": "No hem pogut comprovar si les URL següents són accessibles perquè les funcions d'Internet estan desactivades en aquest Matomo.",
|
1481 |
+
"PrivateDirectoryIsAccessible": "Hem trobat que les URL anteriors són accessibles mitjançant el navegador i NO haurien de ser-ho. Permetre l'accés pot suposar un risc potencial de seguretat, ja que els continguts poden proporcionar informació sobre el vostre servidor i potencialment els vostres usuaris. Si us plau, restringeix-hi l'accés.",
|
1482 |
+
"PrivateDirectoryManualCheck": "Si us plau obriu les URL manualment en un navegador per veure si hi podeu accedir. Si podeu, és possible que hàgiu de modificar la configuració del vostre servidor, ja que aquests fitxers\/directoris no haurien de ser accessibles mitjançant un navegador des d'Internet o la intranet.",
|
1483 |
+
"RecommendedPrivateDirectories": "Directoris privats recomanats",
|
1484 |
+
"RequiredPrivateDirectories": "Directoris privats obligatoris",
|
1485 |
+
"Sections": "Seccions",
|
1486 |
+
"UrlsAccessibleViaBrowser": "Hem trobat que les URL anteriors són accessibles mitjançant el navegador, però recomanem que no ho siguin. Si és possible, restringeix-hi l'accés."
|
1487 |
+
},
|
1488 |
+
"Ecommerce": {
|
1489 |
+
"EcommerceLogSubcategoryHelp1": "El registre de comerç electrònic proporciona dades granulars a nivell de sessió perquè pugueu veure la sessió completa de cada usuari que ha fet una compra o ha abandonat el carretó. Això us pot ajudar a entendre què fan els usuaris abans i després de comprar per revelar oportunitats de millora.",
|
1490 |
+
"EcommerceLogSubcategoryHelp2": "Les dades d'aquesta pàgina s'actualitzen en temps real.",
|
1491 |
+
"EcommerceOverviewSubcategoryHelp1": "La secció Visió general del comerç electrònic és el millor lloc per obtenir una visió d'alt nivell del rendiment de la vostra botiga en línia. D'un cop d'ull podeu veure quantes vendes esteu fent, quants ingressos esteu generant i la taxa de conversió del vostre lloc web.",
|
1492 |
+
"EcommerceOverviewSubcategoryHelp2": "Feu clic a una mètrica individual dins del gràfic destacat per centrar-vos-hi dins del gràfic d'evolució a mida completa.",
|
1493 |
+
"EcommerceOverviewSubcategoryHelp3": "Obteniu més informació a la nostra guia de comerç electrònic aquí.",
|
1494 |
+
"LifeTimeValue": "Valor de per vida del comerç electrònic",
|
1495 |
+
"LifeTimeValueDescription": "Ingressos totals de comerç electrònic atribuïts a aquest client en totes les visites: la suma dels ingressos de totes les comandes de comerç electrònic per a l'identificador de visitant %s.",
|
1496 |
+
"NumberOfItems": "Nombre d'articles al carretó",
|
1497 |
+
"Order": "Comandes",
|
1498 |
+
"OrderId": "Identificador de comanda",
|
1499 |
+
"OrderRevenue": "Ingressos de comandes",
|
1500 |
+
"OrderValue": "Valor de la comanda",
|
1501 |
+
"Orders": "Comandes",
|
1502 |
+
"PluginDescription": "Ecommerce us permet fer un seguiment de quan els usuaris afegeixen productes al carretó i quan es converteixen en una venda de comerç electrònic. També permet fer seguiment de les visualitzacions de productes i categories de productes i carretons abandonats.",
|
1503 |
+
"ProductSubcategoryHelp": "La visualització Productes us pot ajudar a identificar productes i categories que tenen un rendiment superior o inferior per revelar tendències i oportunitats relacionades amb la selecció de productes i les pàgines de la botiga.",
|
1504 |
+
"RevenueLeftInCart": "Ingressos deixats al carretó",
|
1505 |
+
"Sales": "Vendes",
|
1506 |
+
"SalesAdjective": "Vendes %s",
|
1507 |
+
"SalesBy": "Vendes per %s",
|
1508 |
+
"SalesSubcategoryHelp1": "Aquesta secció conté una àmplia col·lecció d'informes que us ajudaran a analitzar les diferents condicions que solen induïr vendes, com ara el trànsit i les fonts de la campanya, el temps i la ubicació dels usuaris i els dispositius utilitzats per accedir-hi.",
|
1509 |
+
"SalesSubcategoryHelp2": "També podeu conèixer exactament com s'associen els ingressos amb cada dimensió, com ara tipus de trànsit concrets o campanyes de seguiment.",
|
1510 |
+
"ViewedProductCategory": "Categoria de producte vista",
|
1511 |
+
"ViewedProductName": "Nom de producte vist",
|
1512 |
+
"ViewedProductPrice": "Preu de producte vist",
|
1513 |
+
"ViewedProductSKU": "SKU de producte vist",
|
1514 |
+
"VisitorProfileAbandonedCartSummary": "%1$s carretons abandonats que inclouen %2$s articles amb un valor total de %3$s.",
|
1515 |
+
"VisitorProfileItemsAndOrders": "%1$s articles adquirits en %2$s comandes de comerç electrònic.",
|
1516 |
+
"VisitorProfileLTV": "S'han generat uns ingressos de per vida de %1$s."
|
1517 |
},
|
1518 |
"Events": {
|
1519 |
+
"AvgEventValue": "El valor mitjà de l'esdeveniment és: %s",
|
1520 |
+
"AvgValue": "Valor mitjà",
|
1521 |
+
"AvgValueDocumentation": "La mitjana de tots els valors d'aquest esdeveniment",
|
1522 |
+
"Category": "Categoria",
|
1523 |
"Event": "Esdeveniment",
|
1524 |
+
"EventAction": "Acció d'esdeveniment",
|
1525 |
+
"EventActions": "Accions d'esdeveniment",
|
1526 |
+
"EventActionsReportDocumentation": "Aquest informe mostra el nombre de vegades que s'ha produït cada acció d'esdeveniment. Podeu veure les categories i els noms d'esdeveniments dels quals es va fer el seguiment juntament amb cada acció d'esdeveniment a la subtaula de la fila. Podeu canviar el que es mostra canviant la dimensió secundària amb l'enllaç a la part inferior de l'informe.",
|
1527 |
+
"EventCategories": "Categories d'esdeveniments",
|
1528 |
+
"EventCategoriesReportDocumentation": "Aquest informe mostra les categories de cada esdeveniment de seguiment i quantes vegades s'ha produït. Podeu veure les accions i els noms dels esdeveniments dels quals es va fer el seguiment juntament amb cada categoria d'esdeveniments a la subtaula de cada fila. Podeu canviar el que es mostra canviant la dimensió secundària amb l'enllaç a la part inferior de l'informe.",
|
1529 |
"EventCategory": "Categoria d'esdeveniment",
|
1530 |
"EventName": "Nom de l'esdeveniment",
|
1531 |
"EventNames": "Noms dels esdeveniments",
|
1532 |
+
"EventNamesReportDocumentation": "Aquest informe mostra els noms associats a cada esdeveniment de seguiment i quantes vegades s'han produït. Podeu veure les accions i categories d'esdeveniments dels quals es va fer un seguiment juntament amb el nom de cada esdeveniment a la subtaula de cada fila. Podeu canviar el que es mostra canviant la dimensió secundària amb l'enllaç a la part inferior de l'informe.",
|
1533 |
+
"EventUrl": "URL de l'esdeveniment",
|
1534 |
+
"EventUrls": "URL d'esdeveniments",
|
1535 |
+
"EventValue": "Valor de l'esdeveniment",
|
1536 |
+
"EventValueTooltip": "El valor total de l'esdeveniment és la suma dels %1$s valors d'esdeveniments %2$s entre el mínim de %3$s i el màxim de %4$s.",
|
1537 |
"Events": "Esdeveniments",
|
1538 |
+
"EventsSubcategoryHelp1": "La secció Esdeveniments ofereix informes sobre els esdeveniments personalitzats associats al vostre lloc. Els esdeveniments solen requerir una configuració personalitzada. Un cop configurats, podeu revisar els informes desglossats per categoria, acció i nom.",
|
1539 |
+
"EventsSubcategoryHelp2": "Més informació sobre el seguiment d'esdeveniments aquí.",
|
1540 |
"EventsWithValue": "Esdeveniments amb valor",
|
1541 |
+
"EventsWithValueDocumentation": "Nombre d'esdeveniments que tenen un valor definit",
|
1542 |
+
"MaxValue": "Valor màxim de l'esdeveniment",
|
1543 |
"MaxValueDocumentation": "El valor màxim per aquest esdeveniment",
|
1544 |
+
"MinValue": "Valor mínim de l'esdeveniment",
|
1545 |
+
"MinValueDocumentation": "El valor mínim per aquest esdeveniment",
|
1546 |
+
"PluginDescription": "Feu un seguiment dels esdeveniments i obteniu informes sobre l'activitat dels vostres visitants.",
|
1547 |
+
"SecondaryDimension": "La dimensió secundària és %s.",
|
1548 |
+
"SwitchToSecondaryDimension": "Canvia a %s",
|
1549 |
+
"TopEvents": "Esdeveniments principals",
|
1550 |
+
"TotalEvents": "Esdeveniments totals",
|
1551 |
+
"TotalEventsDocumentation": "Nombre total d'esdeveniments",
|
1552 |
+
"TotalValue": "Valor d'esdeveniment",
|
1553 |
+
"TotalValueDocumentation": "La suma dels valors de l'esdeveniment",
|
1554 |
+
"ViewEvents": "Veure esdeveniments"
|
1555 |
},
|
1556 |
"Feedback": {
|
1557 |
+
"AppreciateFeedback": "Agraïm molt els vostres comentaris",
|
1558 |
+
"CommunityHelp": "Ajuda de la comunitat",
|
1559 |
+
"ContactUs": "Contacteu-nos",
|
1560 |
+
"DoYouHaveBugReportOrFeatureRequest": "Tens un error per informar o una sol·licitud de funció?",
|
1561 |
+
"FAQs": "Preguntes freqüents",
|
1562 |
+
"FeedbackSubtitle": "Aquí teniu l'oportunitat de demanar-ho! Si us plau, describiu-ho amb tants detalls com pugueu. <br> Els vostres comentaris ens ajudaran a millorar Matomo. %1$s",
|
1563 |
+
"FeedbackTitle": "Si us plau ajudeu-nos a millorar Matomo",
|
1564 |
+
"FormNotEnoughFeedbackText": "Si us plau, no us oblideu de compartir els vostres comentaris a continuació.",
|
1565 |
+
"Forums": "Fòrums",
|
1566 |
+
"HowCanWeHelp": "Com us podem ajudar?",
|
1567 |
+
"HowToCreateTicket": "Si us plau, llegiu les recomanacions per escriure un bon %1$sinforme d'errors%2$s o %3$ssol·licitud de funcions%4$s. A continuació, registreu-vos o inicieu sessió a %5$sel nostre rastrejador de problemes%6$s i creeu un %7$snou tema%8$s.",
|
1568 |
"IWantTo": "Jo vull:",
|
1569 |
+
"LearnWaysToParticipate": "Obteniu informació sobre totes les maneres com podeu%1$s participar%2$s",
|
1570 |
+
"ManuallySendEmailTo": "Si us plau envieu manualment el vostre missatge a",
|
1571 |
+
"MessageBodyValidationError": "El cos del missatge és massa curt (el mínim és de 10 caràcters).",
|
1572 |
+
"NeverAskMeAgain": "No m'ho torneu a preguntar",
|
1573 |
+
"NotTrackingVisits": "Matomo no està fent el seguiment de cap visita",
|
1574 |
+
"PleaseLeaveExternalReviewForMatomo": "Agraïm molt els vostres comentaris. Si teniu un minut, compartiu els vostres pensaments en un d'aquests llocs i inspireu d'altres a unir-se a la nostra revolució de les dades.",
|
1575 |
+
"PluginDescription": "Envieu els vostres comentaris a l'equip de Matomo. Compartiu les vostres idees i suggeriments per fer de Matomo la millor plataforma d'anàlisi del món!",
|
1576 |
+
"Policy": "El vostre missatge i la vostra adreça de correu electrònic s'enviaran amb aquest formulari. La informació només s'utilitzarà per millorar els nostres productes i serveis. Les vostres dades les processem nosaltres, el nostre proveïdor d'allotjament i el nostre gestor de temes d'assistència. Per obtenir-ne més informació, consulteu la política de privadesa de %1$sMatomo%2$s.",
|
1577 |
+
"PopularHelpTopics": "Temes d'ajuda populars",
|
1578 |
+
"PrivacyClaim": "Matomo respecta la vostra %1$sprivadesa%2$s i us ofereix un control total sobre les vostres dades.",
|
1579 |
+
"ProfessionalHelp": "Ajuda professional",
|
1580 |
+
"ProfessionalServicesDedicatedSupport": "Suport d'un membre dedicat de l'equip de Matomo a cada etapa del procès",
|
1581 |
+
"ProfessionalServicesEmailAlerts": "Alertes per correu electrònic per a versions de seguretat per a Matomo",
|
1582 |
+
"ProfessionalServicesIntro": "Amb una subscripció d'assistència local de Matomo, deixeu que el nostre equip experimentat us ajudi en línia a utilitzar Matomo Analytics per fer créixer el vostre negoci.",
|
1583 |
+
"ProfessionalServicesOfferIntro": "De quins serveis podeu beneficiar-vos?",
|
1584 |
+
"ProfessionalServicesOnboarding": "Qüestionari d'incorporació i reunió amb un membre del suport de Matomo",
|
1585 |
+
"ProfessionalServicesSupport": "Servei de sol·licituds en línia les 24 hores del dia",
|
1586 |
+
"ProfessionalServicesTraining": "Accés exclusiu als vídeos de formació de Matomo",
|
1587 |
+
"PurgeOldData": "Vull eliminar algunes dades antigues",
|
1588 |
+
"Question0": "Quins són els vostres problemes més grans o punts sensibles amb Matomo i per què?",
|
1589 |
+
"Question1": "Què és l'únic que us agradaria que es millorés a Matomo i per què?",
|
1590 |
+
"Question2": "Quina és la característica que més trobes a faltar a Matomo i per què?",
|
1591 |
+
"Question3": "Quin és el vostre objectiu principal per utilitzar Matomo?",
|
1592 |
+
"Question4": "Quina és la teva principal preocupació sobre Matomo?",
|
1593 |
+
"RateFeatureConfigurable": "Configurable",
|
1594 |
+
"RateFeatureDislikeAddMissingFeatures": "Afegir les funcions que falten",
|
1595 |
+
"RateFeatureDislikeFixBugs": "Corregir errors",
|
1596 |
+
"RateFeatureDislikeMakeEasier": "Fer-lo més fàcil d'utilitzar",
|
1597 |
+
"RateFeatureDislikeSpeedUp": "Millorar la velocitat",
|
1598 |
+
"RateFeatureEasyToUse": "Fàcil d'usar",
|
1599 |
+
"RateFeatureLeaveMessageDislike": "Com podem millorar aquesta característica?",
|
1600 |
+
"RateFeatureLeaveMessageDislikeExtra": "Si us plau, feu-nos saber com podem fer-ho més bé perquè puguem millorar Matomo.",
|
1601 |
+
"RateFeatureLeaveMessageDislikeExtraBugs": "Lamentem que hagis trobat problemes, fes-nos saber què no ha funcionat.",
|
1602 |
+
"RateFeatureLeaveMessageDislikeExtraEasier": "Alguna part concreta d'aquesta funció que us va resultar difícil d'utilitzar?",
|
1603 |
+
"RateFeatureLeaveMessageDislikeExtraMissing": "Quines característiques trobeu a faltar?",
|
1604 |
+
"RateFeatureLeaveMessageDislikeExtraSpeed": "Podríeu indicar com de lenta és aquesta funció per a vos? Podríeu compartir quantes visites al mes normalment registreu?",
|
1605 |
+
"RateFeatureLeaveMessageDislikeNamedFeature": "Com podem millorar %1$s?",
|
1606 |
+
"RateFeatureLeaveMessageLike": "Què és el que més us agrada d'aquesta funció?",
|
1607 |
+
"RateFeatureLeaveMessageLikeExtra": "Feu-nos saber més coses sobre com feu servir aquesta funció perquè puguem millorar Matomo encara més.",
|
1608 |
+
"RateFeatureLeaveMessageLikeExtraConfigurable": "Hi ha opcions de configuració que trobeu especialment útils? Hi ha altres opcions que us agradaria veure?",
|
1609 |
+
"RateFeatureLeaveMessageLikeExtraEasy": "Hi ha alguna cosa més que pugui fer Matomo més fàcil d'utilitzar o millorar la vostra experiència?",
|
1610 |
+
"RateFeatureLeaveMessageLikeExtraUseful": "Ens podeu explicar una mica com feu servir aquesta informació i què us sembla més útil?",
|
1611 |
+
"RateFeatureLeaveMessageLikeNamedFeature": "Què és el que més us agrada de %1$s?",
|
1612 |
+
"RateFeatureOtherReason": "Un altre motiu",
|
1613 |
+
"RateFeatureSendFeedbackInformation": "La vostra plataforma Matomo ens enviarà (a l'equip de Matomo) un correu electrònic (incloent la vostra adreça de correu electrònic) perquè puguem posar-nos en contacte amb vos si teniu cap pregunta.",
|
1614 |
+
"RateFeatureThankYouTitle": "Gràcies per valorar '%s'!",
|
1615 |
+
"RateFeatureTitle": "Us agrada la funció '%s'? Si us plau, feu-nos-ho saber perquè puguem millorar Matomo.",
|
1616 |
+
"RateFeatureUsefulInfo": "Informació útil",
|
1617 |
+
"ReferBannerEmailShareBody": "Trio Matomo, una alternativa ètica a Google Analytics que m'ofereix el 100%% de propietat de les dades i protegeix les dades dels visitants del meu lloc web.\nComparteixo aquest missatge amb l'esperança que vosaltres també recupereu el poder de les mans de Google i obtingueu la propietat total de les vostres dades.\n\nFeu una ullada a Matomo a https:\/\/matomo.org",
|
1618 |
+
"ReferBannerEmailShareSubject": "Orienteu-los cap a Matomo Analytics per recuperar el control!",
|
1619 |
+
"ReferBannerLonger": "Si us plau, ajudeu-nos a fer difusió de nosaltres perquè més persones tinguin control sobre les seves dades d'anàlisi.",
|
1620 |
+
"ReferBannerSocialShareText": "Si utilitzeu Google Analytics, mantingueu el control canviant ara a una alternativa ètica com Matomo!",
|
1621 |
+
"ReferBannerTitle": "Creieu en Matomo?",
|
1622 |
+
"ReferMatomo": "Referir Matomo",
|
1623 |
+
"RemindMeLater": "Recordeu-m'ho més tard",
|
1624 |
+
"RemoveOtherLabel": "Vull veure les meves dades \"Altres\"",
|
1625 |
+
"ReviewMatomoTitle": "Us agrada Matomo?",
|
1626 |
+
"SearchHelpResources": "Cerca recursos d'ajuda de matomo.org",
|
1627 |
+
"SendFeedback": "Enviar comentaris",
|
1628 |
+
"ThankYou": "Gràcies per ajudar-nos a millorar Matomo!",
|
1629 |
+
"ThankYouForSpreading": "Gràcies per fer-ne difusió i crear una web més segura",
|
1630 |
+
"ThankYouHeart": "Gràcies per ajudar-nos a millorar Matomo! %1$s",
|
1631 |
+
"ThankYourForFeedback": "Agraïm molt els vostres comentaris! %1$s Ens posarem en contacte per si necessitem més informació sobre els vostres comentaris.",
|
1632 |
+
"TopLinkTooltip": "Digueu-nos què en penseu o sol·liciteu Suport Professional.",
|
1633 |
+
"TrackMultipleSites": "Necessito fer un seguiment de diversos llocs o subdominis",
|
1634 |
+
"UserGuides": "Guies d'usuari",
|
1635 |
+
"ViewAnswersToFAQ": "Mostra les respostes a les %1$sPreguntes més freqüents%2$s",
|
1636 |
+
"ViewUserGuides": "Obteniu informació sobre com configurar Matomo i com analitzar de manera efectiva les vostres dades amb les nostres %1$sguies d'usuari%2$s",
|
1637 |
+
"VisitTheForums": "Visiteu els %1$s fòrums%2$s i obteniu ajuda de la comunitat d'usuaris de Matomo",
|
1638 |
+
"WontShowAgain": "No tornarem a mostrar aquest missatge."
|
1639 |
},
|
1640 |
"GeoIp2": {
|
1641 |
+
"AssumingNonApache": "No es pot trobar la funció apache_get_modules, suposem que el servidor web no és Apache.",
|
1642 |
+
"AutomaticSetup": "Configura automàticament la geolocalització mitjançant una base de dades dbip",
|
1643 |
+
"AutomaticSetupDescription": "Per a una correcta geolocalització, Matomo requereix una base de dades externa. Amb aquesta opció, Matomo es configurarà automàticament per descarregar i utilitzar la darrera base de dades dbip a nivell de ciutat. [%1$sMostra les condicions de llicència%2$s]",
|
1644 |
+
"CannotFindGeoIPDatabaseInArchive": "No s'ha pogut trobar cap base de dades DBIP\/GeoIP vàlida a l'arxiu tar %1$s!",
|
1645 |
+
"CannotFindGeoIPServerVar": "La variable %s no està definida. Pot ser que el vostre servidor web no estigui correctament configurat.",
|
1646 |
"CannotListContent": "No s'ha pogut llistar el contingut de %1$s: %2$s",
|
1647 |
+
"CannotSetupGeoIPAutoUpdating": "Sembla que esteu emmagatzemant les vostres bases de dades de geolocalització fora de Matomo (ho sabem perquè no hi ha bases de dades al subdirectori misc, però la vostra GeoIP funciona). Matomo no pot actualitzar automàticament les vostres bases de dades de geolocalització si es troben fora del directori misc.",
|
1648 |
+
"CannotUnzipGeoIPFile": "No s'ha pogut descomprimir el fitxer GeoIP a %1$s: %2$s",
|
1649 |
+
"DownloadNewDatabasesEvery": "Actualitza les bases de dades cada",
|
1650 |
"DownloadingDb": "Descarregant %s",
|
1651 |
+
"FatalErrorDuringDownload": "S'ha produït un error fatal en baixar aquest fitxer. Pot ser que hi hagi alguna cosa malament amb la vostra connexió a Internet, amb la base de dades de geolocalització que heu baixat o amb Matomo. Proveu de baixar-lo i instal·lar-lo manualment.",
|
1652 |
+
"FoundApacheModules": "Matomo ha trobat els següents mòduls d'Apache",
|
|
|
1653 |
"GeoIPDatabases": "Base de dades GeoIP",
|
1654 |
+
"GeoIPImplHasAccessTo": "Aquesta implementació de GeoIP té accés als següents tipus de bases de dades",
|
1655 |
+
"GeoIPLocationProviderDesc_ServerBasedAnonWarn": "Nota: l'anonimat d'IP no té cap efecte sobre les ubicacions informades per aquest proveïdor. Abans d'utilitzar-lo amb l'anonimat d'IP, assegureu-vos que no infringeixi cap llei de privadesa a la qual estigueu subjecte.",
|
1656 |
+
"GeoIPLocationProviderNotRecommended": "La geolocalització funciona, però no esteu fent servir cap dels proveïdors recomanats.",
|
1657 |
+
"GeoIPNoDatabaseFound": "Aquesta implementació de GeoIP no ha pogut trobar cap base de dades.",
|
1658 |
+
"GeoIPNoServerVars": "Matomo no ho pogut trobar cap variable GeoIP %s.",
|
1659 |
+
"GeoIPServerVarsFound": "Matomo detecta les següents variables GeoIP %s",
|
1660 |
+
"GeoIPUpdaterInstructions": "Introduïu els enllaços de descàrrega de les vostres bases de dades a continuació. Si heu comprat bases de dades a %3$sdbip%4$s o %1$sMaxMind%2$s, podeu trobar aquests enllaços al vostre compte dbip o MaxMind. Poseu-vos en contacte amb el vostre proveïdor de bases de dades de geolocalització si teniu problemes per accedir-hi.",
|
1661 |
+
"GeoIPUpdaterIntro": "Actualment Matomo gestiona les actualitzacions de les següents bases de dades",
|
1662 |
+
"GeoIPVariablesConfigurationHere": "Podeu configurar les variables de servidor usades %1$saquí%2$s.",
|
1663 |
+
"GeoLiteCityLink": "Si utilitzeu la base de dades dbip city lite, feu servir aquest enllaç: %1$s%2$s%3$s",
|
1664 |
+
"HowToInstallApacheModule": "Com instal·lo el módul GeoIP per a l'Apache?",
|
1665 |
+
"HowToInstallNginxModule": "Com instal·lo el modul GeoIP per a Nginx?",
|
1666 |
+
"HowToSetupGeoIP": "Com configurar la geolocalització precisa amb dbip",
|
1667 |
+
"HowToSetupGeoIPIntro": "Sembla que no teniu una configuració de geolocalització precisa. Aquesta és una característica útil i sense ella no veureu la informació d'ubicació precisa i completa per als vostres visitants. A continuació us indiquem com podeu començar a utilitzar-lo ràpidament:",
|
1668 |
+
"HowToSetupGeoIP_Step1": "%1$sDescarregueu%2$s la base de dades DBIP City Lite des de %3$sdbip%4$s.",
|
1669 |
+
"HowToSetupGeoIP_Step2": "Extraieu aquest fitxer i copieu el resultat %1$s al subdirectori Matomo %2$smisc%3$s i canvieu-li el nom a %4$s (es pot ferper FTP o SSH).",
|
1670 |
+
"HowToSetupGeoIP_Step3": "Torna a carregar aquesta pantalla. El proveïdor %1$sDBIP\/GeoIP (PHP)%2$s ara estarà %3$sinstal·lat%4$s. Seleccioneu-lo.",
|
1671 |
+
"HowToSetupGeoIP_Step4": "I ja heu acabat! Acabeu de configurar Matomo perquè utilitzi DBIP, la qual cosa significa que podreu veure les regions i ciutats dels vostres visitants juntament amb informació de país molt precisa.",
|
1672 |
"HttpServerModule": "Mòdul del Servidor HTTP",
|
1673 |
+
"IPurchasedGeoIPDBs": "He comprat bases de dades més precises a %3$sdbip%4$s o %1$sMaxMind%2$s i vull configurar actualitzacions automàtiques.",
|
1674 |
+
"ISPDatabase": "Base de dades d'ISP",
|
1675 |
+
"ISPRequiresProviderPlugin": "El seguiment dels proveïdors de serveis d'Internet requereix que el connector del proveïdor estigui instal·lat i activat.",
|
1676 |
+
"IWantToDownloadFreeGeoIP": "Vull descarregar la base de dades DBIP gratuïta...",
|
1677 |
+
"InvalidGeoIPUpdateHost": "L'hoste de l'URL d'actualització de GeoIP %1$s no és de confiança. Per permetre la baixada d'actualitzacions de GeoIP des d'amfitrions diferents de %2$s, ajusteu el paràmetre de %3$s a la configuració.",
|
1678 |
+
"InvalidGeoIPUpdatePeriod": "Període no vàlid per a l'actualització de GeoIP: %1$s. Els valors vàlids són %2$s.",
|
1679 |
+
"LocationDatabase": "Base de dades d'ubicació",
|
1680 |
+
"LocationDatabaseHint": "Una base de dades d'ubicacions és una base de dades de país, regió o ciutat.",
|
1681 |
+
"LocationProviderDesc_Php": "Aquest proveïdor d'ubicació és el més senzill d'instal·lar ja que no requereix configuració del servidor (ideal per a allotjament compartit!). Utilitza una base de dades DBIP o GeoIP 2 i l'API PHP de MaxMind per determinar amb precisió la ubicació dels vostres visitants.",
|
1682 |
+
"LocationProviderDesc_Php_WithExtension": "Aquest proveïdor d'ubicació és més ràpid amb l'extensió instal·lada %1$smaxminddb%2$s.",
|
1683 |
+
"LocationProviderDesc_ServerModule": "Aquest proveïdor d'ubicació utilitza el mòdul GeoIP 2 que s'ha instal·lat al vostre servidor HTTP. Aquest proveïdor és ràpid i precís, però %1$snomés es pot utilitzar amb el seguiment normal del navegador.%2$s",
|
1684 |
+
"LocationProviderDesc_ServerModule2": "Si heu d'importar fitxers de registre o fer alguna altra cosa que requereixi configurar adreces IP, utilitzeu la implementació %3$sPHP GeoIP 2%4$s i instal·leu %1$sl'extensió maxmindb%2$s.",
|
1685 |
+
"MalFormedUpdateUrl": "L'URL %1$s no sembla vàlida. Assegureu-vos d'introduir una URL vàlida que comenci per http:\/\/ o https:\/\/",
|
1686 |
+
"NotManagingGeoIPDBs": "Actualment Matomo no gestiona cap base de dades DBIP o MaxMind.",
|
1687 |
+
"PluginDescription": "Proporciona proveïdors d'ubicació DBIP \/ GeoIP2.",
|
1688 |
+
"ServerBasedVariablesConfiguration": "Configuració de variables de servidor utilitzades pels mòduls de servidor GeoIP 2",
|
1689 |
+
"ServerVariableFor": "Variable de servidor per a %s",
|
1690 |
+
"SetupAutomaticUpdatesOfGeoIP": "Configurar actualitzacions automàtiques de bases de dades de geolocalització",
|
1691 |
+
"ShowCustomServerVariablesConfig": "Utilitzo el mòdul del servidor Geoip2 (Nginx, Apache...) i vull configurar les variables del servidor",
|
1692 |
+
"ThisUrlIsNotAValidGeoIPDB": "El fitxer descarregat no és una base de dades de geolocalització vàlida. Torneu a comprovar l'URL o descarregueu el fitxer manualment.",
|
1693 |
+
"UnsupportedArchiveType": "S'ha trobat el tipus d'arxiu no compatible %1$s.",
|
1694 |
+
"UpdaterHasNotBeenRun": "L'actualització no s'ha executat mai.",
|
1695 |
+
"UpdaterIsNotScheduledToRun": "No està previst que s'executi en el futur.",
|
1696 |
+
"UpdaterScheduledForNextRun": "Està programat per activar-se durant la propera execució de l'ordre cron core:archive.",
|
1697 |
+
"UpdaterWasLastRun": "L'actualitzador es va executar per darrera vegada el %s.",
|
1698 |
+
"UpdaterWillRunNext": "Està programat per executar-se el %s."
|
1699 |
},
|
1700 |
"Goals": {
|
1701 |
"AbandonedCart": "Cistella abandonada",
|
1704 |
"AddNewGoalOrEditExistingGoal": "%1$sAfegeix un nou objectiu%2$s o %3$sEdita objectius existents%4$s",
|
1705 |
"AllowGoalConvertedMoreThanOncePerVisit": "Permetre convertir un objectiu més d'una vegada per visita",
|
1706 |
"AllowMultipleConversionsPerVisit": "Permetre múltiples conversions per visita",
|
1707 |
+
"AtLeastMinutes": "almenys %1$s minuts. Utilitzeu decimals per fer coincidir segons, per exemple, %2$s per fer coincidir 30 segons.",
|
1708 |
"BestCountries": "Els millors paísos amb conversions són:",
|
1709 |
"BestKeywords": "Les paraules clau amb més conversions són:",
|
1710 |
"BestReferrers": "Els llocs webs de referència amb més conversions són:",
|
1711 |
+
"CancelAndReturnToGoals": "Cancel·la i %1$storna a la llista d'objectius%2$s",
|
1712 |
"CaseSensitive": "Concidència sensible a minúscules\/majúscules",
|
1713 |
+
"CategoryTextDevicesDetection_DevicesDetection": "Dispositius",
|
1714 |
+
"CategoryTextGeneral_Visit": "compromís",
|
1715 |
+
"CategoryTextGeneral_Visitors": "Ubicació de l'usuari",
|
1716 |
"CategoryTextReferrers_Referrers": "Referents",
|
1717 |
"CategoryTextVisitsSummary_VisitsSummary": "atribut d'usuari",
|
|