Matomo Analytics – Ethical Stats. Powerful Insights. - Version 4.10.0

Version Description

Download this release

Release Info

Developer matomoteam
Plugin Icon 128x128 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

Files changed (140) hide show
  1. app/LEGALNOTICE +1 -1
  2. app/README.md +1 -1
  3. app/bootstrap.php +1 -1
  4. app/config/global.ini.php +14 -2
  5. app/config/global.php +30 -21
  6. app/core/Access.php +1 -1
  7. app/core/Access/RolesProvider.php +1 -1
  8. app/core/Archive.php +108 -54
  9. app/core/Archive/ArchiveInvalidator.php +30 -14
  10. app/core/Archive/DataTableFactory.php +0 -1
  11. app/core/ArchiveProcessor.php +3 -2
  12. app/core/ArchiveProcessor/ArchivingStatus.php +0 -2
  13. app/core/ArchiveProcessor/Loader.php +4 -0
  14. app/core/ArchiveProcessor/LoaderLock.php +4 -0
  15. app/core/ArchiveProcessor/Parameters.php +0 -3
  16. app/core/ArchiveProcessor/Rules.php +40 -15
  17. app/core/AssetManager.php +77 -7
  18. app/core/AssetManager/UIAsset.php +0 -1
  19. app/core/AssetManager/UIAssetFetcher/Chunk.php +69 -0
  20. app/core/AssetManager/UIAssetFetcher/JScriptUIAssetFetcher.php +2 -18
  21. app/core/AssetManager/UIAssetFetcher/PluginUmdAssetFetcher.php +297 -0
  22. app/core/AssetManager/UIAssetFetcher/StylesheetUIAssetFetcher.php +0 -1
  23. app/core/Changes/Model.php +218 -0
  24. app/core/Changes/UserChanges.php +77 -0
  25. app/core/CliMulti/Output.php +0 -1
  26. app/core/CliMulti/OutputInterface.php +0 -3
  27. app/core/CliMulti/Process.php +6 -0
  28. app/core/CliMulti/StaticOutput.php +0 -2
  29. app/core/Columns/Dimension.php +1 -5
  30. app/core/Columns/Discriminator.php +0 -1
  31. app/core/Common.php +33 -2
  32. app/core/Config/Cache.php +13 -7
  33. app/core/Config/GeneralConfig.php +48 -0
  34. app/core/Config/IniFileChain.php +38 -29
  35. app/core/Console.php +9 -1
  36. app/core/Cookie.php +4 -1
  37. app/core/CronArchive.php +69 -7
  38. app/core/CronArchive/QueueConsumer.php +33 -4
  39. app/core/CronArchive/SegmentArchiving.php +0 -1
  40. app/core/DataAccess/ArchiveSelector.php +0 -1
  41. app/core/DataAccess/ArchivingDbAdapter.php +40 -6
  42. app/core/DataAccess/LogAggregator.php +2 -19
  43. app/core/DataAccess/Model.php +11 -4
  44. app/core/DataTable.php +0 -1
  45. app/core/DataTable/Map.php +0 -1
  46. app/core/DataTable/Renderer/Xml.php +1 -1
  47. app/core/DataTable/Row.php +5 -2
  48. app/core/Date.php +5 -1
  49. app/core/Db.php +2 -1
  50. app/core/Db/Adapter/Mysqli.php +4 -0
  51. app/core/Db/Adapter/Pdo/Mysql.php +4 -0
  52. app/core/Db/Schema/Mysql.php +18 -3
  53. app/core/Db/TransactionLevel.php +15 -3
  54. app/core/DeviceDetector/DeviceDetectorFactory.php +0 -1
  55. app/core/Exception/NotYetInstalledException.php +0 -2
  56. app/core/ExceptionHandler.php +26 -9
  57. app/core/Filechecks.php +6 -2
  58. app/core/Filesystem.php +33 -3
  59. app/core/FrontController.php +17 -5
  60. app/core/Http.php +1 -1
  61. app/core/Http/ControllerResolver.php +0 -1
  62. app/core/Mail/Transport.php +0 -1
  63. app/core/Menu/MenuAbstract.php +11 -4
  64. app/core/Metrics.php +0 -1
  65. app/core/NumberFormatter.php +1 -1
  66. app/core/Period/Range.php +11 -1
  67. app/core/Piwik.php +29 -1
  68. app/core/Plugin.php +22 -0
  69. app/core/Plugin/ArchivedMetric.php +1 -4
  70. app/core/Plugin/ComputedMetric.php +1 -4
  71. app/core/Plugin/Controller.php +9 -19
  72. app/core/Plugin/Dimension/VisitDimension.php +48 -0
  73. app/core/Plugin/Manager.php +0 -1
  74. app/core/Plugin/MetadataLoader.php +0 -1
  75. app/core/Plugin/Segment.php +15 -5
  76. app/core/Plugin/Visualization.php +47 -7
  77. app/core/ProfessionalServices/Advertising.php +1 -0
  78. app/core/ReportRenderer.php +17 -10
  79. app/core/ReportRenderer/Html.php +0 -1
  80. app/core/ReportRenderer/Pdf.php +8 -2
  81. app/core/Scheduler/RetryableException.php +9 -0
  82. app/core/Scheduler/Schedule/SpecificTime.php +6 -0
  83. app/core/Scheduler/Scheduler.php +42 -2
  84. app/core/Scheduler/Timetable.php +88 -0
  85. app/core/Segment.php +19 -6
  86. app/core/Segment/SegmentsList.php +14 -0
  87. app/core/Session.php +4 -2
  88. app/core/Session/SessionAuth.php +0 -2
  89. app/core/Session/SessionFingerprint.php +0 -1
  90. app/core/Settings/FieldConfig.php +12 -0
  91. app/core/Settings/FieldConfig/ArrayField.php +9 -0
  92. app/core/Settings/FieldConfig/MultiPair.php +10 -0
  93. app/core/SettingsPiwik.php +1 -1
  94. app/core/SupportedBrowser.php +0 -1
  95. app/core/Tracker.php +27 -4
  96. app/core/Tracker/Action.php +2 -0
  97. app/core/Tracker/Cache.php +0 -1
  98. app/core/Tracker/Db.php +3 -0
  99. app/core/Tracker/Db/Pdo/Mysql.php +0 -1
  100. app/core/Tracker/FingerprintSalt.php +0 -6
  101. app/core/Tracker/GoalManager.php +3 -2
  102. app/core/Tracker/PageUrl.php +2 -2
  103. app/core/Tracker/Request.php +4 -2
  104. app/core/Tracker/RequestSet.php +1 -2
  105. app/core/Tracker/Response.php +10 -4
  106. app/core/Twig.php +11 -22
  107. app/core/Updater.php +32 -36
  108. app/core/Updater/Migration/Custom.php +0 -2
  109. app/core/Updater/Migration/Db/DropColumns.php +0 -1
  110. app/core/Updates/4.0.0-b1.php +0 -1
  111. app/core/Updates/4.0.0-rc3.php +0 -1
  112. app/core/Updates/4.0.0-rc4.php +0 -1
  113. app/core/Updates/4.0.1-b1.php +0 -6
  114. app/core/Updates/4.1.2-b2.php +0 -6
  115. app/core/Updates/4.10.0-b1.php +61 -0
  116. app/core/Updates/4.3.0-b3.php +0 -3
  117. app/core/Updates/4.3.0-b4.php +0 -1
  118. app/core/Updates/4.3.0-rc2.php +0 -3
  119. app/core/Updates/4.5.0-b1.php +0 -1
  120. app/core/Updates/4.6.0-b1.php +0 -1
  121. app/core/Updates/4.7.0-b2.php +67 -0
  122. app/core/Updates/4.7.1-b1.php +57 -0
  123. app/core/Updates/5.0.0-b1.php +91 -0
  124. app/core/Url.php +43 -20
  125. app/core/UrlHelper.php +1 -1
  126. app/core/Validators/CharacterLength.php +0 -1
  127. app/core/Version.php +2 -1
  128. app/core/View.php +3 -1
  129. app/core/View/HtmlReportEmailHeaderView.php +0 -1
  130. app/core/View/OneClickDone.php +1 -1
  131. app/core/Visualization/Sparkline.php +15 -11
  132. app/core/testMinimumPhpVersion.php +26 -11
  133. app/js/piwik.min.js +37 -37
  134. app/lang/am.json +1 -0
  135. app/lang/ar.json +22 -10
  136. app/lang/be.json +4 -4
  137. app/lang/bg.json +2067 -261
  138. app/lang/bn.json +1 -0
  139. app/lang/bs.json +1 -1
  140. app/lang/ca.json +1027 -167
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
- exit;
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 array(
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(array('.', '-'), '', \Piwik\Version::VERSION) . '-';
75
  },
76
 
77
- 'entities.idNames' => DI\add(array('idGoal', 'idDimension')),
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' => array(),
87
 
88
  /**
89
- * By setting this option to false, the check that the DB schema version matches the version of the source code will be no longer performed.
90
- * Thus it allows you to execute for example a newer version of Matomo with an older Matomo database version. Please note
91
- * disabling this setting is not recommended because often an older DB version is not compatible with newer source code.
92
- * If you disable this setting, make sure to execute the updates after updating the source code. The setting can be useful if
93
- * you want to update Matomo without any outage when you know the current source code update will still run fine for a short time
94
- * while in the background the database updates are running.
 
95
  */
96
  'EnableDbVersionCheck' => true,
97
 
98
- 'fileintegrity.ignore' => DI\add(array(
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 = array();
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 = array();
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 (!empty($entry['0']['ipv6'])
190
- && filter_var($entry['0']['ipv6'], FILTER_VALIDATE_IP)) {
 
 
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('isSameFingerprintsAcrossWebsites', DI\get('ini.Tracker.enable_fingerprinting_across_websites')),
 
 
 
220
 
221
  'archiving.performance.logger' => null,
222
 
223
- \Piwik\CronArchive\Performance\Logger::class => DI\autowire()->constructorParameter('logger', DI\get('archiving.performance.logger')),
 
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('ExceptionCapabilityAccessWebsite', array("'" . $capability ."'", $idsite)));
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 = array();
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(Parameters $params, $forceIndexedBySite = false,
185
- $forceIndexedByDate = false)
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($idSites, $period, $strDate, $segment,
214
- $_restrictSitesToLogin);
 
 
 
 
 
215
  }
216
 
217
  /**
@@ -236,11 +245,20 @@ class Archive implements ArchiveQuery
236
  *
237
  * @return ArchiveQuery
238
  */
239
- public static function factory(Segment $segment, array $periods, array $idSites, $idSiteIsAll = false,
240
- $isMultipleDate = false)
241
- {
242
- return StaticContainer::get(ArchiveQueryFactory::class)->factory($segment, $periods, $idSites, $idSiteIsAll,
243
- $isMultipleDate);
 
 
 
 
 
 
 
 
 
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 (empty($resultIndices)
 
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 = array();
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 = array($archiveNames);
493
  }
494
 
495
  $archiveNames = array_filter($archiveNames);
496
 
497
  // apply idSubtable
498
- if ($idSubtable !== null
 
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 = array();
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, $archiveDataType, $this->params->getIdSites(), $this->params->getPeriods(), $this->params->getSegment(), $defaultRow = null);
 
 
 
 
 
 
514
  if (empty($dataNames)) {
515
- return $result; // NOTE: note posting Archive.noArchivedData here, because there might be archive data, someone just requested nothing
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 = array();
564
- $archiveGroups = array();
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 (Rules::isArchivingEnabledFor($this->params->getIdSites(), $this->params->getSegment(), $this->getPeriodLabel())
 
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 (Common::getRequestVar('skipArchiveSegmentToday', 0, 'int')
 
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("Archive site %s, %s (%s) skipped, archive is before the website was created.",
634
- $idSite, $period->getLabel(), $period->getPrettyString());
 
 
 
 
635
  continue;
636
  }
637
 
638
- // if the starting date is in the future we know there is no visiidsite = ?t
639
- if ($twoDaysBeforePeriod->isLater($today)) {
640
- Log::debug("Archive site %s, %s (%s) skipped, archive is after today.",
641
- $idSite, $period->getLabel(), $period->getPrettyString());
 
 
 
 
 
 
 
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(), $this->params->getPeriods(), $this->params->getSegment(), $plugins);
 
 
 
 
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
- $idSites,
690
- $this->params->getSegment(),
691
- $this->getPeriodLabel(),
692
- $plugin
693
  );
694
  }
695
 
@@ -707,15 +752,17 @@ class Archive implements ArchiveQuery
707
  */
708
  private function getResultIndices()
709
  {
710
- $indices = array();
711
 
712
- if (count($this->params->getIdSites()) > 1
 
713
  || $this->forceIndexedBySite
714
  ) {
715
  $indices['site'] = 'idSite';
716
  }
717
 
718
- if (count($this->params->getPeriods()) > 1
 
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] = array();
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
- } // Goal_* metrics are processed by the Goals plugin (HACK)
802
- elseif (strpos($report, 'Goal_') === 0) {
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 (empty($plugin)
 
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 = array($site->getId());
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(), $period->getLabel(), $periodDateStr, $this->params->getSegment()->getOriginalString(),
847
- $plugin, $requestedReport);
848
-
849
- if (!empty($prepareResult)
 
 
 
 
 
 
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 = array();
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
- Cache::clearCacheGeneral();
 
 
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::yesterday();
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
- $newSegment = Segment::combine($params->getSegment()->getOriginalString(), SegmentExpression::AND_DELIMITER, $segment);
683
- if ($newSegment === $segment && $params->getRequestedPlugin() === $plugin) { // being processed now
 
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
- && !self::shouldProcessReportsAllPlugins($idSites, $segment, $periodLabel)
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
- Date $dateStart, \Piwik\Period $period, Segment $segment, Site $site)
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
- && $dateStart->getTimestamp() <= $now
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', $timezone)->getDateStartUTC())->setTimezone($timezone)->getTimestamp();
 
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
- && $generalConfig['archiving_range_force_on_browser_request'] == false
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
- && (!self::isBrowserArchivingAvailableForSegments() || self::isSegmentPreProcessed($idSites, $segment))
233
- && !SettingsServer::isArchivePhpTriggered() // Only applies when we are not running core:archive command
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
- || in_array($segment, $segmentsToProcessUrlDecoded);
319
  }
320
 
321
  /**
@@ -323,8 +325,11 @@ class Rules
323
  *
324
  * @return string[]
325
  */
326
- public static function getSelectableDoneFlagValues($includeInvalidated = true, Parameters $params = null, $checkAuthorizedToArchive = true)
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
- * @param boolean $core
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 = number_format($value / 1000, 2);
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
- ? DefaultProvider::ID
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('{', '&#x7B;', '&#123;', '&lcub;', '&lbrace;', '&#x0007B;');
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 . '&#8291;' . $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 (!isset($mergedConfigSettings['General']['trusted_hosts']) || !is_array($mergedConfigSettings['General']['trusted_hosts'])) {
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 (empty($host)
 
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', array($this->getFilename($id)));
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 = array();
46
 
47
  /**
48
  * The merged INI settings.
49
  *
50
  * @var array
51
  */
52
- protected $mergedSettings = array();
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 = array(), $userSettingsFile = null)
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] = array();
75
  }
76
 
77
  $result =& $this->mergedSettings[$name];
@@ -146,12 +148,12 @@ class IniFileChain
146
 
147
  $dirty = false;
148
 
149
- $configToWrite = array();
150
  foreach ($this->mergedSettings as $sectionName => $changedSection) {
151
- if(isset($existingMutableSettings[$sectionName])){
152
  $existingMutableSection = $existingMutableSettings[$sectionName];
153
- } else{
154
- $existingMutableSection = array();
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 (empty($changedSection) xor empty($existingMutableSection)
 
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 = array(), $userSettingsFile = null)
211
  {
212
- if (!empty($defaultSettingsFiles)
 
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 (!empty($values)
 
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 = array('mergedSettings' => $this->mergedSettings, 'settingsChain' => $this->settingsChain);
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 = array();
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 = array();
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) ?: array();
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 = array();
330
  foreach ($this->settingsChain as $file => $settings) {
331
- if ($file == $userSettingsFile
 
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 = array();
400
  }
401
 
402
  if (empty($modified) || !is_array($modified)) {
403
- $modified = array();
404
  }
405
 
406
- return array_udiff_assoc($modified, $original, array(__CLASS__, 'compareElements'));
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', array(&$values));
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 ($exitCode === 0 && $importantLogDetector->hasEncounteredImportantLog()) {
 
 
 
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
- $Expires = $this->formatExpireTime($Expires);
 
 
 
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
- $this->logArchiveJobFinished($url, $timers[$index], $visitsForPeriod, $archivesBeingQueried[$index]['plugin'], $archivesBeingQueried[$index]['report']);
 
 
 
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
- $this->logger->info("Archived website id {$params['idSite']}, period = {$params['period']}, date = "
 
 
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->wrapped, __FUNCTION__], func_get_args());
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->wrapped, __FUNCTION__], func_get_args());
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->wrapped, __FUNCTION__], func_get_args());
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->wrapped, __FUNCTION__], func_get_args());
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->wrapped, __FUNCTION__], func_get_args());
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->wrapped, __FUNCTION__], func_get_args());
 
 
 
 
 
 
 
 
 
 
 
 
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
- $tempTableIdVisitColumn = 'idvisit BIGINT(10) UNSIGNED NOT NULL';
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
- } elseif ($readerDb->isErrNo($e, \Piwik\Updater\Migration\Db::ERROR_CODE_REQUIRES_PRIMARY_KEY)
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
- list($idarchive, $value) = explode('.', $pair);
86
 
87
  array_shift($duplicateArchives);
88
 
@@ -99,7 +99,7 @@ class Model
99
  break;
100
  }
101
 
102
- list($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,7 +157,7 @@ class Model
157
 
158
  if (!empty($name)) {
159
  if (strpos($name, '.') !== false) {
160
- list($plugin, $name) = explode('.', $name, 2);
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
- $sequence->create();
 
 
 
 
 
 
 
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) != 0) {
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
- VALUES ( 'anonymous', '', 'anonymous@example.org', '', 0, '$now', '$now' );");
 
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
- Option::set(self::TEST_OPTION_NAME, '1'); // try setting something w/ the new transaction isolation level
 
 
 
 
 
 
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(array('Piwik\ExceptionHandler', 'handleException'));
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
- $result = Piwik_GetErrorMessagePage($message, $debugTrace, true, true, $logoHeaderUrl, $logoFaviconUrl);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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', array(&$result, $ex));
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
- $message .= "<br /><code>" . self::getCommandToChangeOwnerOfPiwikFiles() . "</code><br />";
 
 
111
  $message .= self::getMakeWritableCommand($realpath);
112
- $message .= '<code>chmod 755 '.$realpath.'/console</code><br />';
 
 
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
- $sourceFiles = self::globr($source, '*');
298
- $targetFiles = self::globr($target, '*');
 
 
 
 
 
 
 
 
 
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
- $diff = array_diff($targetFiles, $sourceFiles);
 
 
 
 
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
- if ($this->isSupportedBrowserCheckNeeded()) {
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 ((Config::getInstance()->General['maintenance_mode'] != 1) || Common::isPhpCliMode()) {
490
  return;
491
  }
492
- Common::sendResponseCode(503);
 
 
 
 
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 = number_format($value / 1000, 2);
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 = number_format($value / 1000, 2);
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
- if (!isset($paramsToSet['period'])) {
480
- $period = Common::getRequestVar('period');
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
- if (!isset($paramsToSet['date'])) {
494
- $endDate = $this->strDate;
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 = Common::getRequestVar('date');
644
  Period::checkDateFormat($rawDate);
645
 
646
- $periodStr = Common::getRequestVar('period');
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 = Common::getRequestVar('period');
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' => $this->type,
346
- 'category' => $this->category,
347
- 'name' => $this->name,
348
- 'segment' => $this->segment,
349
- 'sqlSegment' => $this->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
- $this->metadata = $this->dataTable->getAllTableMetadata();
461
-
462
- if (isset($this->metadata[DataTable::ARCHIVED_DATE_METADATA_NAME])) {
463
- $this->reportLastUpdatedMessage = $this->makePrettyArchivedOnText();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 = array(
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
- array(self::normalizeRendererType($rendererType), implode(', ', self::$availableReportRenderers))
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(array("\n", "\t"), " ", $filename);
159
 
160
  return $filename . "." . $extension;
161
  }
@@ -169,11 +171,16 @@ abstract class ReportRenderer extends BaseFactory
169
  */
170
  protected static function getOutputPath($filename)
171
  {
172
- $outputFilename = StaticContainer::get('path.tmp') . '/assets/' . $filename;
 
 
 
 
 
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 = array(
240
  'label' => Piwik::translate('General_Name'),
241
  'value' => Piwik::translate('General_Value'),
242
- );
243
  }
244
 
245
- return array(
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 = substr($rowMetrics[$columnId], 0, $this->truncateAfter);
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
- 'idSites' => $this->idSites,
189
- '_hideImplementationData' => 0,
190
- 'filter_limit' => -1,
191
- 'filter_offset' => 0,
192
- '_showAllSegments' => 1,
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
- $isOverlay = $module == 'Overlay';
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 = @Config::getInstance()->General['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
- StaticContainer::get(LoggerInterface::class)->debug("Tracker encountered an exception: {ex}", [$e]);
118
 
119
  $handler->onException($this, $requestSet, $e);
120
  }
@@ -171,7 +183,8 @@ class Tracker
171
  */
172
  public static function initCorePiwikInTrackerMode()
173
  {
174
- if (SettingsServer::isTrackerApiRequest()
 
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 (Common::getRequestVar('forceLargeWindowLookBackForVisitor', false, null, $args) == 1
 
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 () { // TODO: add a log here
 
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($sku, $name, $category, $price, $quantity) = $item;
 
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 (strtolower($encoding) != 'utf-8'
291
- && $encoding != false
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 ($tracker->isDebugModeEnabled()
 
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
- } else if (is_file($customImage) && is_readable($customImage)) {
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: '.$size['mime']);
202
  echo $img;
203
  return true;
204
  }
@@ -229,6 +233,8 @@ class Response
229
 
230
  protected function logExceptionToErrorLog($e)
231
  {
232
- error_log(sprintf("Error in Matomo (tracker): %s", str_replace("\n", " ", $this->getMessageFromException($e))));
 
 
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
- $chars = array('{', '&#x7B;', '&#123;', '&lcub;', '&lbrace;', '&#x0007B;');
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 . '&#8291;' . $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
- $templatesCompiledPath = StaticContainer::get('path.tmp.templates');
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' => $templatesCompiledPath,
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('&nbsp;', html_entity_decode('&nbsp;', 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('&nbsp;', html_entity_decode('&nbsp;', 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 = array();
237
- $classNames = array();
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
- /** @var Updates $update */
257
- $update = StaticContainer::getContainer()->make($className);
258
- $migrationsForComponent = $update->getMigrations($this);
 
 
259
  foreach ($migrationsForComponent as $index => $migration) {
260
  $migration = $this->keepBcForOldMigrationQueryFormat($index, $migration);
261
  $queries[] = $migration;
262
  }
263
- $this->hasMajorDbUpdate = $this->hasMajorDbUpdate || call_user_func(array($className, 'isMajorUpdate'));
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
- if (!$hasSuperUserAccess) {
484
- $currentAccess->setSuperUserAccess(true);
485
- }
486
-
487
- $pluginManager = \Piwik\Plugin\Manager::getInstance();
488
-
489
- // if error in any core update, show message + help message + EXIT
490
- // if errors in any plugins updates, show them on screen, disable plugins that errored + CONTINUE
491
- // if warning in any core update or in any plugins update, show message + CONTINUE
492
- // if no error or warning, success message + CONTINUE
493
- foreach ($componentsWithUpdateFile as $name => $filenames) {
494
- try {
495
- $warnings = array_merge($warnings, $this->update($name));
496
- } catch (UpdaterErrorException $e) {
497
- $errors[] = $e->getMessage();
498
- if ($name == 'core') {
499
- $coreError = true;
500
- break;
501
- } elseif ($pluginManager->isPluginActivated($name) && $pluginManager->isPluginBundledWithCore($name)) {
502
- $coreError = true;
503
- break;
504
- } elseif ($pluginManager->isPluginActivated($name)) {
505
- $pluginManager->deactivatePlugin($name);
506
- $deactivatedPlugins[] = $name;
507
  }
508
  }
509
- }
510
 
511
- if (!$hasSuperUserAccess) {
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 (isset(Config::getInstance()->General['proxy_uri_header'])
 
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 (isset(Config::getInstance()->General['enable_trusted_host_check'])
 
213
  && Config::getInstance()->General['enable_trusted_host_check'] == 0
214
  ) {
215
  return true;
216
  }
217
 
218
- if ($host === false) {
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 (Piwik::hasUserSuperUserAccess()
 
281
  && file_exists(Config::getLocalConfigPath())
282
  ) {
283
  $config = Config::getInstance()->$domain;
284
  if (!is_array($host)) {
285
- $host = array($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 = array();
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 = array();
375
  }
376
 
377
  $host = self::getHost($checkTrustedHost);
@@ -390,7 +410,8 @@ class Url
390
  public static function getCurrentQueryString()
391
  {
392
  $url = '';
393
- if (isset($_SERVER['QUERY_STRING'])
 
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 (UrlHelper::isLookLikeUrl($url)
 
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 = array(self::getHost(), self::getCurrentHost());
572
  if (!empty($parseRequest['host'])) {
573
  $hosts[] = $parseRequest['host'];
574
  }
575
 
576
  // drop port numbers from hostnames and IP addresses
577
- $hosts = array_map(array('self', 'getHostSanitized'), $hosts);
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'], array('http', 'https'));
587
  }
588
 
589
  /**
@@ -635,7 +657,7 @@ class Url
635
  * Returns hostname, without port numbers
636
  *
637
  * @param $host
638
- * @return array
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 array();
654
  }
655
 
656
  $hosts = $config[$key];
657
  if (!is_array($hosts)) {
658
- return array();
659
  }
660
  return $hosts;
661
  }
@@ -735,7 +757,7 @@ class Url
735
  */
736
  public static function getLocalHostnames()
737
  {
738
- return array('localhost', '127.0.0.1', '::1', '[::1]', '[::]', '0000::1', '0177.0.0.1', '2130706433', '[0:0:0:0:0:ffff:127.0.0.1]');
739
  }
740
 
741
  /**
@@ -769,10 +791,10 @@ class Url
769
  return 'http';
770
  }
771
 
772
- if ((isset($_SERVER['HTTPS']) && ($_SERVER['HTTPS'] == 'on' || $_SERVER['HTTPS'] === true))
 
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 (strpos($host, ':') === false
 
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 (strlen($urlQuery) == 0) {
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.6.2';
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&amp;action=$3&amp;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&amp;action=$3&amp;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
- if (empty($colors)) { // quick fix so row evolution sparklines will have color in widgetize's iframes
172
- $colors = array(
173
- 'backgroundColor' => '#ffffff',
174
- 'lineColor' => '#162C4A',
175
- 'minPointColor' => '#ff7f7f',
176
- 'maxPointColor' => '#75BF7C',
177
- 'lastPointColor' => '#55AAFF',
178
- 'fillColor' => '#ffffff'
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 (class_exists('\Piwik\SettingsServer')
 
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($message, $optionalTrace = false, $optionalLinks = false, $optionalLinkBack = false,
115
- $logoUrl = false, $faviconUrl = false, $isCli = null)
116
- {
117
- error_log(sprintf("Error in Matomo: %s", str_replace("\n", " ", strip_tags($message))));
 
 
 
 
 
 
 
 
 
 
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 (isset($_SERVER['HTTP_X_REQUESTED_WITH'])
 
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(array("<br />", "<br>", "<br/>", "</p>"), "\n", $message);
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 au=at.getTimeAlias();if((r-au)>3000){r=au+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,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",di=cn,aM="application/x-www-form-urlencoded; charset=UTF-8",cE=aM,aI=cj||"",bO="",c8="",ct="",cc=cf||"",bF="",bU="",ba,bp="",df=["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,c6,bw,bY=false,aN="Lax",bs=false,cY,bk,bC,cS=33955200000,cu=1800000,de=15768000000,a8=true,bL=false,bn=false,bW=false,aV=false,ch,b2={},cs={},bt={},bA=200,cA={},c9={},dg={},cg=[],ck=false,cJ=false,au=false,dh=false,cV=false,aS=false,bi=v(),cF=null,c7=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;
33
- try{bp=J.title}catch(cG){bp=""}function aH(du){if(bs){return 0}var ds=new RegExp("(^|;)[ ]*"+du+"=([^;]*)"),dt=ds.exec(J.cookie);return dt?V(dt[2]):0}bJ=!aH(cU);function dm(dw,dx,dA,dz,du,dv,dy){if(bs&&dw!==cU){return}var dt;if(dA){dt=new Date();dt.setTime(dt.getTime()+dA)}if(!dy){dy="Lax"}J.cookie=dw+"="+t(dx)+(dA?";expires="+dt.toGMTString():"")+";path="+(dz||"/")+(du?";domain="+du:"")+(dv?";secure":"")+";SameSite="+dy;if((!dA||dA>=0)&&aH(dw)!==String(dx)){var ds="There was an error setting cookie `"+dw+"`. Please check domain and path.";ao(ds)}}function b8(ds){var du,dt;ds=j(ds,az);for(dt=0;dt<co.length;dt++){ds=j(ds,co[dt])}if(bV){du=new RegExp("#.*");return ds.replace(du,"")}return ds}function b1(du,ds){var dv=s(ds),dt;if(dv){return ds}if(ds.slice(0,1)==="/"){return s(du)+"://"+d(du)+ds}du=b8(du);dt=du.indexOf("?");if(dt>=0){du=du.slice(0,dt)}dt=du.lastIndexOf("/");if(dt!==du.length-1){du=du.slice(0,dt+1)}return du+ds}function cP(du,ds){var dt;du=String(du).toLowerCase();ds=String(ds).toLowerCase();
34
- if(du===ds){return true}if(ds.slice(0,1)==="."){if(du===ds.slice(1)){return true}dt=du.length-ds.length;if((dt>0)&&(du.slice(dt)===ds)){return true}}return false}function cr(ds){var dt=document.createElement("a");if(ds.indexOf("//")!==0&&ds.indexOf("http")!==0){if(ds.indexOf("*")===0){ds=ds.substr(1)}if(ds.indexOf(".")===0){ds=ds.substr(1)}ds="http://"+ds}dt.href=w.toAbsoluteUrl(ds);if(dt.pathname){return dt.pathname}return""}function a9(dt,ds){if(!an(ds,"/")){ds="/"+ds}if(!an(dt,"/")){dt="/"+dt}var du=(ds==="/"||ds==="/*");if(du){return true}if(dt===ds){return true}ds=String(ds).toLowerCase();dt=String(dt).toLowerCase();if(U(ds,"*")){ds=ds.slice(0,-1);du=(!ds||ds==="/");if(du){return true}if(dt===ds){return true}return dt.indexOf(ds)===0}if(!U(dt,"/")){dt+="/"}if(!U(ds,"/")){ds+="/"}return dt.indexOf(ds)===0}function aw(dw,dy){var dt,ds,du,dv,dx;for(dt=0;dt<aC.length;dt++){dv=O(aC[dt]);dx=cr(aC[dt]);if(cP(dw,dv)&&a9(dy,dx)){return true}}return false}function a1(dv){var dt,ds,du;for(dt=0;
35
- dt<aC.length;dt++){ds=O(aC[dt].toLowerCase());if(dv===ds){return true}if(ds.slice(0,1)==="."){if(dv===ds.slice(1)){return true}du=dv.length-ds.length;if((du>0)&&(dv.slice(du)===ds)){return true}}}return false}function cv(ds,du){ds=ds.replace("send_image=0","send_image=1");var dt=new Image(1,1);dt.onload=function(){H=0;if(typeof du==="function"){du({request:ds,trackerUrl:aI,success:true})}};dt.onerror=function(){if(typeof du==="function"){du({request:ds,trackerUrl:aI,success:false})}};dt.src=aI+(aI.indexOf("?")<0?"?":"&")+ds}function cM(ds){if(di==="POST"){return true}return ds&&(ds.length>2000||ds.indexOf('{"requests"')===0)}function aP(){return"object"===typeof g&&"function"===typeof g.sendBeacon&&"function"===typeof Blob}function bc(dw,dz,dy){var du=aP();if(!du){return false}var dv={type:"application/x-www-form-urlencoded; charset=UTF-8"};var dA=false;var dt=aI;try{var ds=new Blob([dw],dv);if(dy&&!cM(dw)){ds=new Blob([],dv);dt=dt+(dt.indexOf("?")<0?"?":"&")+dw}dA=g.sendBeacon(dt,ds)}catch(dx){return false
36
- }if(dA&&typeof dz==="function"){dz({request:dw,trackerUrl:aI,success:true,isSendBeacon:true})}return dA}function dd(dt,du,ds){if(!M(ds)||null===ds){ds=true}if(m&&bc(dt,du,ds)){return}setTimeout(function(){if(m&&bc(dt,du,ds)){return}var dx;try{var dw=W.XMLHttpRequest?new W.XMLHttpRequest():W.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):null;dw.open("POST",aI,true);dw.onreadystatechange=function(){if(this.readyState===4&&!(this.status>=200&&this.status<300)){var dy=m&&bc(dt,du,ds);if(!dy&&ds){cv(dt,du)}else{if(typeof du==="function"){du({request:dt,trackerUrl:aI,success:false,xhr:this})}}}else{if(this.readyState===4&&(typeof du==="function")){du({request:dt,trackerUrl:aI,success:true,xhr:this})}}};dw.setRequestHeader("Content-Type",cE);dw.withCredentials=true;dw.send(dt)}catch(dv){dx=m&&bc(dt,du,ds);if(!dx&&ds){cv(dt,du)}else{if(typeof du==="function"){du({request:dt,trackerUrl:aI,success:false})}}}},50)}function cl(dt){var ds=new Date();var du=ds.getTime()+dt;if(!r||du>r){r=du}}function bg(){bi=true;
37
- cF=new Date().getTime()}function dl(){var ds=new Date().getTime();return !cF||(ds-cF)>bb}function aD(){if(dl()){bX()}}function a0(){if(J.visibilityState==="hidden"&&dl()){bX()}else{if(J.visibilityState==="visible"){cF=new Date().getTime()}}}function dp(){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&&dl()){bX()}}})}function cK(dw){var dt=new Date();var ds=dt.getTime();c7=ds;if(cJ&&ds<cJ){var du=cJ-ds;setTimeout(dw,du);cl(du+50);cJ+=50;return}if(cJ===false){var dv=800;cJ=ds+dv}dw()}function aT(){if(aH(cU)){bJ=false}else{if(aH(bj)){bJ=true}}}function bM(dt,ds,du){aT();if(!bJ){cT.push(dt);return}aA=true;if(!cY&&dt){if(cI&&bJ){dt+="&consent=1"}cK(function(){if(c5&&bc(dt,du,true)){cl(100);return}if(cM(dt)){dd(dt,du)}else{cv(dt,du)}cl(ds)})}if(!aS){dp()}}function cq(ds){if(cY){return false}return(ds&&ds.length)}function dc(ds,dw){if(!dw||dw>=ds.length){return[ds]}var dt=0;var du=ds.length;var dv=[];
38
- for(dt;dt<du;dt+=dw){dv.push(ds.slice(dt,dt+dw))}return dv}function dn(dt,ds){if(!cq(dt)){return}if(!bJ){cT.push(dt);return}aA=true;cK(function(){var dw=dc(dt,50);var du=0,dv;for(du;du<dw.length;du++){dv='{"requests":["?'+dw[du].join('","?')+'"],"send_image":0}';if(c5&&bc(dv,null,false)){cl(100)}else{dd(dv,null,false)}}cl(ds)})}function aY(ds){return bq+ds+"."+cc+"."+bv}function b5(du,dt,ds){dm(du,"",-86400,dt,ds)}function cb(){if(bs){return"0"}if(!M(W.showModalDialog)&&M(g.cookieEnabled)){return g.cookieEnabled?"1":"0"}var ds=bq+"testcookie";dm(ds,"1",undefined,bw,c6,bY,aN);var dt=aH(ds)==="1"?"1":"0";b5(ds);return dt}function bo(){bv=cd((c6||c2)+(bw||"/")).slice(0,4)}function cQ(){if(M(dg.res)){return dg}var dt,dv,dw={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(dt in dw){if(Object.prototype.hasOwnProperty.call(dw,dt)){dv=g.mimeTypes[dw[dt]];
39
- dg[dt]=(dv&&dv.enabledPlugin)?"1":"0"}}}if(!((new RegExp("Edge[ /](\\d+[\\.\\d]+)")).test(g.userAgent))&&typeof navigator.javaEnabled!=="unknown"&&M(g.javaEnabled)&&g.javaEnabled()){dg.java="1"}if(!M(W.showModalDialog)&&M(g.cookieEnabled)){dg.cookie=g.cookieEnabled?"1":"0"}else{dg.cookie=cb()}}var du=parseInt(ab.width,10);var ds=parseInt(ab.height,10);dg.res=parseInt(du,10)+"x"+parseInt(ds,10);return dg}function b3(){var dt=aY("cvar"),ds=aH(dt);if(ds&&ds.length){ds=W.JSON.parse(ds);if(Z(ds)){return ds}}return{}}function cN(){if(aV===false){aV=b3()}}function cZ(){var ds=cQ();return cd((g.userAgent||"")+(g.platform||"")+W.JSON.stringify(ds)+(new Date()).getTime()+Math.random()).slice(0,16)}function aF(){var ds=cQ();return cd((g.userAgent||"")+(g.platform||"")+W.JSON.stringify(ds)).slice(0,6)}function bl(){return Math.floor((new Date()).getTime()/1000)}function aO(){var dt=bl();var du=aF();var ds=String(dt)+du;return ds}function db(du){du=String(du);var dx=aF();var dv=dx.length;var dw=du.substr(-1*dv,dv);
40
- var dt=parseInt(du.substr(0,du.length-dv),10);if(dt&&dw&&dw===dx){var ds=bl();if(a5<=0){return true}if(ds>=dt&&ds<=(dt+a5)){return true}}return false}function dq(ds){if(!cV){return""}var dw=e(ds,az);if(!dw){return""}dw=String(dw);var du=new RegExp("^[a-zA-Z0-9]+$");if(dw.length===32&&du.test(dw)){var dt=dw.substr(16,32);if(db(dt)){var dv=dw.substr(0,16);return dv}}return""}function cW(){if(!bU){bU=dq(bT)}var du=new Date(),ds=Math.round(du.getTime()/1000),dt=aY("id"),dx=aH(dt),dw,dv;if(dx){dw=dx.split(".");dw.unshift("0");if(bU.length){dw[1]=bU}return dw}if(bU.length){dv=bU}else{if("0"===cb()){dv=""}else{dv=cZ()}}dw=["1",dv,ds];return dw}function a4(){var dv=cW(),dt=dv[0],du=dv[1],ds=dv[2];return{newVisitor:dt,uuid:du,createTs:ds}}function aL(){var dv=new Date(),dt=dv.getTime(),dw=a4().createTs;var ds=parseInt(dw,10);var du=(ds*1000)+cS-dt;return du}function aR(ds){if(!cc){return}var du=new Date(),dt=Math.round(du.getTime()/1000);if(!M(ds)){ds=a4()}var dv=ds.uuid+"."+ds.createTs+".";dm(aY("id"),dv,aL(),bw,c6,bY,aN)
41
- }function bS(){var ds=aH(aY("ref"));if(ds.length){try{ds=W.JSON.parse(ds);if(Z(ds)){return ds}}catch(dt){}}return["","",0,""]}function bD(du){var dt=bq+"testcookie_domain";var ds="testvalue";dm(dt,ds,10000,null,du,bY,aN);if(aH(dt)===ds){b5(dt,null,du);return true}return false}function aJ(){var dt=bs;bs=false;var ds,du;for(ds=0;ds<bB.length;ds++){du=aY(bB[ds]);if(du!==cU&&du!==bj&&0!==aH(du)){b5(du,bw,c6)}}bs=dt}function b9(ds){cc=ds}function dr(dw){if(!dw||!Z(dw)){return}var dv=[];var du;for(du in dw){if(Object.prototype.hasOwnProperty.call(dw,du)){dv.push(du)}}var dx={};dv.sort();var ds=dv.length;var dt;for(dt=0;dt<ds;dt++){dx[dv[dt]]=dw[dv[dt]]}return dx}function ci(){dm(aY("ses"),"1",cu,bw,c6,bY,aN)}function bm(){var dv="";var dt="abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";var du=dt.length;var ds;for(ds=0;ds<6;ds++){dv+=dt.charAt(Math.floor(Math.random()*du))}return dv}function aE(dt){if(ct!==""){dt+=ct;bn=true;return dt}if(!h){return dt}var du=(typeof h.timing==="object")&&h.timing?h.timing:undefined;
42
- if(!du){du=(typeof h.getEntriesByType==="function")&&h.getEntriesByType("navigation")?h.getEntriesByType("navigation")[0]:undefined}if(!du){return dt}var ds="";if(du.connectEnd&&du.fetchStart){if(du.connectEnd<du.fetchStart){return}ds+="&pf_net="+Math.round(du.connectEnd-du.fetchStart)}if(du.responseStart&&du.requestStart){if(du.responseStart<du.requestStart){return}ds+="&pf_srv="+Math.round(du.responseStart-du.requestStart)}if(du.responseStart&&du.responseEnd){if(du.responseEnd<du.responseStart){return}ds+="&pf_tfr="+Math.round(du.responseEnd-du.responseStart)}if(M(du.domLoading)){if(du.domInteractive&&du.domLoading){if(du.domInteractive<du.domLoading){return}ds+="&pf_dm1="+Math.round(du.domInteractive-du.domLoading)}}else{if(du.domInteractive&&du.responseEnd){if(du.domInteractive<du.responseEnd){return}ds+="&pf_dm1="+Math.round(du.domInteractive-du.responseEnd)}}if(du.domComplete&&du.domInteractive){if(du.domComplete<du.domInteractive){return}ds+="&pf_dm2="+Math.round(du.domComplete-du.domInteractive)
43
- }if(du.loadEventEnd&&du.loadEventStart){if(du.loadEventEnd<du.loadEventStart){return}ds+="&pf_onl="+Math.round(du.loadEventEnd-du.loadEventStart)}return dt+ds}function cy(du,dO,dP){var dN,dt=new Date(),dB=Math.round(dt.getTime()/1000),dy,dL,dv=1024,dU,dC,dK=aV,dw=aY("ses"),dI=aY("ref"),dF=aY("cvar"),dG=aH(dw),dM=bS(),dQ=ba||bT,dz,ds;if(bs){aJ()}if(cY){return""}var dH=a4();var dE=J.characterSet||J.charset;if(!dE||dE.toLowerCase()==="utf-8"){dE=null}dz=dM[0];ds=dM[1];dy=dM[2];dL=dM[3];if(!dG){if(!bC||!dz.length){for(dN in cw){if(Object.prototype.hasOwnProperty.call(cw,dN)){dz=e(dQ,cw[dN]);if(dz.length){break}}}for(dN in bN){if(Object.prototype.hasOwnProperty.call(bN,dN)){ds=e(dQ,bN[dN]);if(ds.length){break}}}}dU=d(bu);dC=dL.length?d(dL):"";if(dU.length&&!a1(dU)&&(!bC||!dC.length||a1(dC))){dL=bu}if(dL.length||dz.length){dy=dB;dM=[dz,ds,dy,b8(dL.slice(0,dv))];dm(dI,W.JSON.stringify(dM),de,bw,c6,bY,aN)}}du+="&idsite="+cc+"&rec=1&r="+String(Math.random()).slice(2,8)+"&h="+dt.getHours()+"&m="+dt.getMinutes()+"&s="+dt.getSeconds()+"&url="+t(b8(dQ))+(bu.length?"&urlref="+t(b8(bu)):"")+(ac(bF)?"&uid="+t(bF):"")+"&_id="+dH.uuid+"&_idn="+dH.newVisitor+(dz.length?"&_rcn="+t(dz):"")+(ds.length?"&_rck="+t(ds):"")+"&_refts="+dy+(String(dL).length?"&_ref="+t(b8(dL.slice(0,dv))):"")+(dE?"&cs="+t(dE):"")+"&send_image=0";
44
- var dT=cQ();for(dN in dT){if(Object.prototype.hasOwnProperty.call(dT,dN)){du+="&"+dN+"="+dT[dN]}}var dS=[];if(dO){for(dN in dO){if(Object.prototype.hasOwnProperty.call(dO,dN)&&/^dimension\d+$/.test(dN)){var dx=dN.replace("dimension","");dS.push(parseInt(dx,10));dS.push(String(dx));du+="&"+dN+"="+t(dO[dN]);delete dO[dN]}}}if(dO&&D(dO)){dO=null}for(dN in cA){if(Object.prototype.hasOwnProperty.call(cA,dN)){du+="&"+dN+"="+t(cA[dN])}}for(dN in bt){if(Object.prototype.hasOwnProperty.call(bt,dN)){var dD=(-1===P(dS,dN));if(dD){du+="&dimension"+dN+"="+t(bt[dN])}}}if(dO){du+="&data="+t(W.JSON.stringify(dO))}else{if(at){du+="&data="+t(W.JSON.stringify(at))}}function dA(dV,dW){var dX=W.JSON.stringify(dV);if(dX.length>2){return"&"+dW+"="+t(dX)}return""}var dR=dr(b2);var dJ=dr(cs);du+=dA(dR,"cvar");du+=dA(dJ,"e_cvar");if(aV){du+=dA(aV,"_cvar");for(dN in dK){if(Object.prototype.hasOwnProperty.call(dK,dN)){if(aV[dN][0]===""||aV[dN][1]===""){delete aV[dN]}}}if(bW){dm(dF,W.JSON.stringify(aV),cu,bw,c6,bY,aN)
45
- }}if(a8&&bL&&!bn){du=aE(du);bn=true}if(aQ){du+="&pv_id="+aQ}aR(dH);ci();du+=ag(dP,{tracker:bP,request:du});if(c8.length){du+="&"+c8}if(C(ch)){du=ch(du)}return du}bX=function bd(){var ds=new Date();ds=ds.getTime();if(!c7){return false}if(c7+bb<=ds){bP.ping();return true}return false};function bx(dv,du,dz,dw,ds,dC){var dy="idgoal=0",dt=new Date(),dA=[],dB,dx=String(dv).length;if(dx){dy+="&ec_id="+t(dv)}dy+="&revenue="+du;if(String(dz).length){dy+="&ec_st="+dz}if(String(dw).length){dy+="&ec_tx="+dw}if(String(ds).length){dy+="&ec_sh="+ds}if(String(dC).length){dy+="&ec_dt="+dC}if(c9){for(dB in c9){if(Object.prototype.hasOwnProperty.call(c9,dB)){if(!M(c9[dB][1])){c9[dB][1]=""}if(!M(c9[dB][2])){c9[dB][2]=""}if(!M(c9[dB][3])||String(c9[dB][3]).length===0){c9[dB][3]=0}if(!M(c9[dB][4])||String(c9[dB][4]).length===0){c9[dB][4]=1}dA.push(c9[dB])}}dy+="&ec_items="+t(W.JSON.stringify(dA))}dy=cy(dy,at,"ecommerce");bM(dy,bQ);if(dx){c9={}}}function b4(ds,dw,dv,du,dt,dx){if(String(ds).length&&M(dw)){bx(ds,dw,dv,du,dt,dx)
46
- }}function bz(ds){if(M(ds)){bx("",ds,"","","","")}}function b6(dt,dv,du){if(!bH){aQ=bm()}var ds=cy("action_name="+t(ap(dt||bp)),dv,"log");if(a8&&!bn){ds=aE(ds)}bM(ds,bQ,du)}function a6(du,dt){var dv,ds="(^| )(piwik[_-]"+dt+"|matomo[_-]"+dt;if(du){for(dv=0;dv<du.length;dv++){ds+="|"+du[dv]}}ds+=")( |$)";return new RegExp(ds)}function aZ(ds){return(aI&&ds&&0===String(ds).indexOf(aI))}function cC(dw,ds,dx,dt){if(aZ(ds)){return 0}var dv=a6(bR,"download"),du=a6(be,"link"),dy=new RegExp("\\.("+df.join("|")+")([?&#]|$)","i");if(du.test(dw)){return"link"}if(dt||dv.test(dw)||dy.test(ds)){return"download"}if(dx){return 0}return"link"}function ay(dt){var ds;ds=dt.parentNode;while(ds!==null&&M(ds)){if(ai.isLinkElement(dt)){break}dt=ds;ds=dt.parentNode}return dt}function dk(dx){dx=ay(dx);if(!ai.hasNodeAttribute(dx,"href")){return}if(!M(dx.href)){return}var dw=ai.getAttributeValueFromNode(dx,"href");var dt=dx.pathname||cr(dx.href);var dy=dx.hostname||d(dx.href);var dz=dy.toLowerCase();var du=dx.href.replace(dy,dz);
47
- var dv=new RegExp("^(javascript|vbscript|jscript|mocha|livescript|ecmascript|mailto|tel):","i");if(!dv.test(du)){var ds=cC(dx.className,du,aw(dz,dt),ai.hasNodeAttribute(dx,"download"));if(ds){return{type:ds,href:du}}}}function aU(ds,dt,du,dv){var dw=w.buildInteractionRequestParams(ds,dt,du,dv);if(!dw){return}return cy(dw,null,"contentInteraction")}function bh(ds,dt){if(!ds||!dt){return false}var du=w.findTargetNode(ds);if(w.shouldIgnoreInteraction(du)){return false}du=w.findTargetNodeNoDefault(ds);if(du&&!Y(du,dt)){return false}return true}function cB(du,dt,dw){if(!du){return}var ds=w.findParentContentNode(du);if(!ds){return}if(!bh(ds,du)){return}var dv=w.buildContentBlock(ds);if(!dv){return}if(!dv.target&&dw){dv.target=dw}return w.buildInteractionRequestParams(dt,dv.name,dv.piece,dv.target)}function a2(dt){if(!cg||!cg.length){return false}var ds,du;for(ds=0;ds<cg.length;ds++){du=cg[ds];if(du&&du.name===dt.name&&du.piece===dt.piece&&du.target===dt.target){return true}}return false}function a3(ds){return function(dw){if(!ds){return
48
- }var du=w.findParentContentNode(ds);var dt;if(dw){dt=dw.target||dw.srcElement}if(!dt){dt=ds}if(!bh(du,dt)){return}if(!du){return false}var dx=w.findTargetNode(du);if(!dx||w.shouldIgnoreInteraction(dx)){return false}var dv=dk(dx);if(dh&&dv&&dv.type){return dv.type}return bP.trackContentInteractionNode(dt,"click")}}function b7(du){if(!du||!du.length){return}var ds,dt;for(ds=0;ds<du.length;ds++){dt=w.findTargetNode(du[ds]);if(dt&&!dt.contentInteractionTrackingSetupDone){dt.contentInteractionTrackingSetupDone=true;ar(dt,"click",a3(dt))}}}function bE(du,dv){if(!du||!du.length){return[]}var ds,dt;for(ds=0;ds<du.length;ds++){if(a2(du[ds])){du.splice(ds,1);ds--}else{cg.push(du[ds])}}if(!du||!du.length){return[]}b7(dv);var dw=[];for(ds=0;ds<du.length;ds++){dt=cy(w.buildImpressionRequestParams(du[ds].name,du[ds].piece,du[ds].target),undefined,"contentImpressions");if(dt){dw.push(dt)}}return dw}function cH(dt){var ds=w.collectContent(dt);return bE(ds,dt)}function bf(dt){if(!dt||!dt.length){return[]
49
- }var ds;for(ds=0;ds<dt.length;ds++){if(!w.isNodeVisible(dt[ds])){dt.splice(ds,1);ds--}}if(!dt||!dt.length){return[]}return cH(dt)}function aK(du,ds,dt){var dv=w.buildImpressionRequestParams(du,ds,dt);return cy(dv,null,"contentImpression")}function dj(dv,dt){if(!dv){return}var ds=w.findParentContentNode(dv);var du=w.buildContentBlock(ds);if(!du){return}if(!dt){dt="Unknown"}return aU(dt,du.name,du.piece,du.target)}function cX(dt,dv,ds,du){return"e_c="+t(dt)+"&e_a="+t(dv)+(M(ds)?"&e_n="+t(ds):"")+(M(du)?"&e_v="+t(du):"")+"&ca=1"}function ax(du,dw,ds,dv,dy,dx){if(!ac(du)||!ac(dw)){ao("Error while logging event: Parameters `category` and `action` must not be empty or filled with whitespaces");return false}var dt=cy(cX(du,dw,ds,dv),dy,"event");bM(dt,bQ,dx)}function ce(ds,dv,dt,dw){var du=cy("search="+t(ds)+(dv?"&search_cat="+t(dv):"")+(M(dt)?"&search_count="+dt:""),dw,"sitesearch");bM(du,bQ)}function c1(ds,dw,dv,du){var dt=cy("idgoal="+ds+(dw?"&revenue="+dw:""),dv,"goal");bM(dt,bQ,du)}function da(dv,ds,dz,dy,du){var dx=ds+"="+t(b8(dv));
50
- var dt=cB(du,"click",dv);if(dt){dx+="&"+dt}var dw=cy(dx,dz,"link");bM(dw,bQ,dy)}function b0(dt,ds){if(dt!==""){return dt+ds.charAt(0).toUpperCase()+ds.slice(1)}return ds}function cm(dx){var dw,ds,dv=["","webkit","ms","moz"],du;if(!bk){for(ds=0;ds<dv.length;ds++){du=dv[ds];if(Object.prototype.hasOwnProperty.call(J,b0(du,"hidden"))){if(J[b0(du,"visibilityState")]==="prerender"){dw=true}break}}}if(dw){ar(J,du+"visibilitychange",function dt(){J.removeEventListener(du+"visibilitychange",dt,false);dx()});return}dx()}function by(){var dt=bP.getVisitorId();var ds=aO();return dt+ds}function cp(ds){if(!ds){return}if(!ai.hasNodeAttribute(ds,"href")){return}var dt=ai.getAttributeValueFromNode(ds,"href");if(!dt||aZ(dt)){return}if(!bP.getVisitorId()){return}dt=j(dt,az);var du=by();dt=I(dt,az,du);ai.setAnyAttribute(ds,"href",dt)}function br(dv){var dw=ai.getAttributeValueFromNode(dv,"href");if(!dw){return false}dw=String(dw);var dt=dw.indexOf("//")===0||dw.indexOf("http://")===0||dw.indexOf("https://")===0;
51
- if(!dt){return false}var ds=dv.pathname||cr(dv.href);var du=(dv.hostname||d(dv.href)).toLowerCase();if(aw(du,ds)){if(!cP(c2,O(du))){return true}return false}return false}function cO(ds){var dt=dk(ds);if(dt&&dt.type){dt.href=p(dt.href);da(dt.href,dt.type,undefined,null,ds);return}if(cV){ds=ay(ds);if(br(ds)){cp(ds)}}}function cD(){return J.all&&!J.addEventListener}function c3(ds){var du=ds.which;var dt=(typeof ds.button);if(!du&&dt!=="undefined"){if(cD()){if(ds.button&1){du=1}else{if(ds.button&2){du=3}else{if(ds.button&4){du=2}}}}else{if(ds.button===0||ds.button==="0"){du=1}else{if(ds.button&1){du=2}else{if(ds.button&2){du=3}}}}}return du}function bZ(ds){switch(c3(ds)){case 1:return"left";case 2:return"middle";case 3:return"right"}}function a7(ds){return ds.target||ds.srcElement}function c4(ds){return ds==="A"||ds==="AREA"}function aG(ds){function dt(dv){var dw=a7(dv);var dx=dw.nodeName;var du=a6(bG,"ignore");while(!c4(dx)&&dw&&dw.parentNode){dw=dw.parentNode;dx=dw.nodeName}if(dw&&c4(dx)&&!du.test(dw.className)){return dw
52
- }}return function(dw){dw=dw||W.event;var dx=dt(dw);if(!dx){return}var dv=bZ(dw);if(dw.type==="click"){var du=false;if(ds&&dv==="middle"){du=true}if(dx&&!du){cO(dx)}}else{if(dw.type==="mousedown"){if(dv==="middle"&&dx){aW=dv;bI=dx}else{aW=bI=null}}else{if(dw.type==="mouseup"){if(dv===aW&&dx===bI){cO(dx)}aW=bI=null}else{if(dw.type==="contextmenu"){cO(dx)}}}}}}function av(dv,du,ds){var dt=typeof du;if(dt==="undefined"){du=true}ar(dv,"click",aG(du),ds);if(du){ar(dv,"mouseup",aG(du),ds);ar(dv,"mousedown",aG(du),ds);ar(dv,"contextmenu",aG(du),ds)}}function aX(dt,dw,dx){if(ck){return true}ck=true;var dy=false;var dv,du;function ds(){dy=true}n(function(){function dz(dB){setTimeout(function(){if(!ck){return}dy=false;dx.trackVisibleContentImpressions();dz(dB)},dB)}function dA(dB){setTimeout(function(){if(!ck){return}if(dy){dy=false;dx.trackVisibleContentImpressions()}dA(dB)},dB)}if(dt){dv=["scroll","resize"];for(du=0;du<dv.length;du++){if(J.addEventListener){J.addEventListener(dv[du],ds,false)}else{W.attachEvent("on"+dv[du],ds)
53
- }}dA(100)}if(dw&&dw>0){dw=parseInt(dw,10);dz(dw)}})}var bK={enabled:true,requests:[],timeout:null,interval:2500,sendRequests:function(){var ds=this.requests;this.requests=[];if(ds.length===1){bM(ds[0],bQ)}else{dn(ds,bQ)}},canQueue:function(){return !m&&this.enabled},pushMultiple:function(dt){if(!this.canQueue()){dn(dt,bQ);return}var ds;for(ds=0;ds<dt.length;ds++){this.push(dt[ds])}},push:function(ds){if(!ds){return}if(!this.canQueue()){bM(ds,bQ);return}bK.requests.push(ds);if(this.timeout){clearTimeout(this.timeout);this.timeout=null}this.timeout=setTimeout(function(){bK.timeout=null;bK.sendRequests()},bK.interval);var dt="RequestQueue"+aB;if(!Object.prototype.hasOwnProperty.call(b,dt)){b[dt]={unload:function(){if(bK.timeout){clearTimeout(bK.timeout)}bK.sendRequests()}}}}};bo();aR();this.hasConsent=function(){return bJ};this.getVisitorId=function(){return a4().uuid};this.getVisitorInfo=function(){return cW()};this.getAttributionInfo=function(){return bS()};this.getAttributionCampaignName=function(){return bS()[0]
54
- };this.getAttributionCampaignKeyword=function(){return bS()[1]};this.getAttributionReferrerTimestamp=function(){return bS()[2]};this.getAttributionReferrerUrl=function(){return bS()[3]};this.setTrackerUrl=function(ds){aI=ds};this.getTrackerUrl=function(){return aI};this.getMatomoUrl=function(){return aa(this.getTrackerUrl(),bO)};this.getPiwikUrl=function(){return this.getMatomoUrl()};this.addTracker=function(du,dt){if(!M(du)||null===du){du=this.getTrackerUrl()}var ds=new T(du,dt);L.push(ds);u.trigger("TrackerAdded",[this]);return ds};this.getSiteId=function(){return cc};this.setSiteId=function(ds){b9(ds)};this.resetUserId=function(){bF=""};this.setUserId=function(ds){if(ac(ds)){bF=ds}};this.setVisitorId=function(dt){var ds=/[0-9A-Fa-f]{16}/g;if(x(dt)&&ds.test(dt)){bU=dt}else{ao("Invalid visitorId set"+dt)}};this.getUserId=function(){return bF};this.setCustomData=function(ds,dt){if(Z(ds)){at=ds}else{if(!at){at={}}at[ds]=dt}};this.getCustomData=function(){return at};this.setCustomRequestProcessing=function(ds){ch=ds
55
- };this.appendToTrackingUrl=function(ds){c8=ds};this.getRequest=function(ds){return cy(ds)};this.addPlugin=function(ds,dt){b[ds]=dt};this.setCustomDimension=function(ds,dt){ds=parseInt(ds,10);if(ds>0){if(!M(dt)){dt=""}if(!x(dt)){dt=String(dt)}bt[ds]=dt}};this.getCustomDimension=function(ds){ds=parseInt(ds,10);if(ds>0&&Object.prototype.hasOwnProperty.call(bt,ds)){return bt[ds]}};this.deleteCustomDimension=function(ds){ds=parseInt(ds,10);if(ds>0){delete bt[ds]}};this.setCustomVariable=function(dt,ds,dw,du){var dv;if(!M(du)){du="visit"}if(!M(ds)){return}if(!M(dw)){dw=""}if(dt>0){ds=!x(ds)?String(ds):ds;dw=!x(dw)?String(dw):dw;dv=[ds.slice(0,bA),dw.slice(0,bA)];if(du==="visit"||du===2){cN();aV[dt]=dv}else{if(du==="page"||du===3){b2[dt]=dv}else{if(du==="event"){cs[dt]=dv}}}}};this.getCustomVariable=function(dt,du){var ds;if(!M(du)){du="visit"}if(du==="page"||du===3){ds=b2[dt]}else{if(du==="event"){ds=cs[dt]}else{if(du==="visit"||du===2){cN();ds=aV[dt]}}}if(!M(ds)||(ds&&ds[0]==="")){return false
56
- }return ds};this.deleteCustomVariable=function(ds,dt){if(this.getCustomVariable(ds,dt)){this.setCustomVariable(ds,"","",dt)}};this.deleteCustomVariables=function(ds){if(ds==="page"||ds===3){b2={}}else{if(ds==="event"){cs={}}else{if(ds==="visit"||ds===2){aV={}}}}};this.storeCustomVariablesInCookie=function(){bW=true};this.setLinkTrackingTimer=function(ds){bQ=ds};this.getLinkTrackingTimer=function(){return bQ};this.setDownloadExtensions=function(ds){if(x(ds)){ds=ds.split("|")}df=ds};this.addDownloadExtensions=function(dt){var ds;if(x(dt)){dt=dt.split("|")}for(ds=0;ds<dt.length;ds++){df.push(dt[ds])}};this.removeDownloadExtensions=function(du){var dt,ds=[];if(x(du)){du=du.split("|")}for(dt=0;dt<df.length;dt++){if(P(du,df[dt])===-1){ds.push(df[dt])}}df=ds};this.setDomains=function(ds){aC=x(ds)?[ds]:ds;var dw=false,du=0,dt;for(du;du<aC.length;du++){dt=String(aC[du]);if(cP(c2,O(dt))){dw=true;break}var dv=cr(dt);if(dv&&dv!=="/"&&dv!=="/*"){dw=true;break}}if(!dw){aC.push(c2)}};this.enableCrossDomainLinking=function(){cV=true
57
- };this.disableCrossDomainLinking=function(){cV=false};this.isCrossDomainLinkingEnabled=function(){return cV};this.setCrossDomainLinkingTimeout=function(ds){a5=ds};this.getCrossDomainLinkingUrlParameter=function(){return t(az)+"="+t(by())};this.setIgnoreClasses=function(ds){bG=x(ds)?[ds]:ds};this.setRequestMethod=function(ds){if(ds){di=String(ds).toUpperCase()}else{di=cn}if(di==="GET"){this.disableAlwaysUseSendBeacon()}};this.setRequestContentType=function(ds){cE=ds||aM};this.setGenerationTimeMs=function(ds){ao("setGenerationTimeMs is no longer supported since Matomo 4. The call will be ignored. The replacement is setPagePerformanceTiming.")};this.setPagePerformanceTiming=function(dw,dy,dx,dt,dz,du){var dv={pf_net:dw,pf_srv:dy,pf_tfr:dx,pf_dm1:dt,pf_dm2:dz,pf_onl:du};try{dv=Q(dv,M);dv=B(dv);ct=l(dv);if(ct===""){ao("setPagePerformanceTiming() called without parameters. This function needs to be called with at least one performance parameter.");return}bn=false;bL=true}catch(ds){ao("setPagePerformanceTiming: "+ds.toString())
58
- }};this.setReferrerUrl=function(ds){bu=ds};this.setCustomUrl=function(ds){ba=b1(bT,ds)};this.getCurrentUrl=function(){return ba||bT};this.setDocumentTitle=function(ds){bp=ds};this.setPageViewId=function(ds){aQ=ds;bH=true};this.setAPIUrl=function(ds){bO=ds};this.setDownloadClasses=function(ds){bR=x(ds)?[ds]:ds};this.setLinkClasses=function(ds){be=x(ds)?[ds]:ds};this.setCampaignNameKey=function(ds){cw=x(ds)?[ds]:ds};this.setCampaignKeywordKey=function(ds){bN=x(ds)?[ds]:ds};this.discardHashTag=function(ds){bV=ds};this.setCookieNamePrefix=function(ds){bq=ds;if(aV){aV=b3()}};this.setCookieDomain=function(ds){var dt=O(ds);if(!bs&&!bD(dt)){ao("Can't write cookie on domain "+ds)}else{c6=dt;bo()}};this.setExcludedQueryParams=function(ds){co=x(ds)?[ds]:ds};this.getCookieDomain=function(){return c6};this.hasCookies=function(){return"1"===cb()};this.setSessionCookie=function(du,dt,ds){if(!du){throw new Error("Missing cookie name")}if(!M(ds)){ds=cu}bB.push(du);dm(aY(du),dt,ds,bw,c6,bY,aN)};this.getCookie=function(dt){var ds=aH(aY(dt));
59
- if(ds===0){return null}return ds};this.setCookiePath=function(ds){bw=ds;bo()};this.getCookiePath=function(ds){return bw};this.setVisitorCookieTimeout=function(ds){cS=ds*1000};this.setSessionCookieTimeout=function(ds){cu=ds*1000};this.getSessionCookieTimeout=function(){return cu};this.setReferralCookieTimeout=function(ds){de=ds*1000};this.setConversionAttributionFirstReferrer=function(ds){bC=ds};this.setSecureCookie=function(ds){if(ds&&location.protocol!=="https:"){ao("Error in setSecureCookie: You cannot use `Secure` on http.");return}bY=ds};this.setCookieSameSite=function(ds){ds=String(ds);ds=ds.charAt(0).toUpperCase()+ds.toLowerCase().slice(1);if(ds!=="None"&&ds!=="Lax"&&ds!=="Strict"){ao("Ignored value for sameSite. Please use either Lax, None, or Strict.");return}if(ds==="None"){if(location.protocol==="https:"){this.setSecureCookie(true)}else{ao("sameSite=None cannot be used on http, reverted to sameSite=Lax.");ds="Lax"}}aN=ds};this.disableCookies=function(){bs=true;if(cc){aJ()}};this.areCookiesEnabled=function(){return !bs
60
- };this.setCookieConsentGiven=function(){if(bs&&!cY){bs=false;if(cc&&aA){aR();var ds=cy("ping=1",null,"ping");bM(ds,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,c6);this.disableCookies()};this.rememberCookieConsentGiven=function(dt){if(dt){dt=dt*60*60*1000}else{dt=30*365*24*60*60*1000}this.setCookieConsentGiven();var ds=new Date().getTime();dm(cL,ds,dt,bw,c6,bY,aN)};this.deleteCookies=function(){aJ()};this.setDoNotTrack=function(dt){var ds=g.doNotTrack||g.msDoNotTrack;cY=dt&&(ds==="yes"||ds==="1");if(cY){this.disableCookies()}};this.alwaysUseSendBeacon=function(){c5=true};this.disableAlwaysUseSendBeacon=function(){c5=false};this.addListener=function(dt,ds){av(dt,ds,false)};this.enableLinkTracking=function(dt){if(dh){return}dh=true;var ds=this;q(function(){au=true;var du=J.body;av(du,dt,true)})};this.enableJSErrorTracking=function(){if(c0){return
61
- }c0=true;var ds=W.onerror;W.onerror=function(dx,dv,du,dw,dt){cm(function(){var dy="JavaScript Errors";var dz=dv+":"+du;if(dw){dz+=":"+dw}if(P(cz,dy+dz+dx)===-1){cz.push(dy+dz+dx);ax(dy,dz,dx)}});if(ds){return ds(dx,dv,du,dw,dt)}return false}};this.disablePerformanceTracking=function(){a8=false};this.enableHeartBeatTimer=function(ds){ds=Math.max(ds||15,5);bb=ds*1000;if(c7!==null){dp()}};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(ds){if(W.location.protocol==="file:"){W.location=ds}};this.setCountPreRendered=function(ds){bk=ds};this.trackGoal=function(ds,dv,du,dt){cm(function(){c1(ds,dv,du,dt)})};this.trackLink=function(dt,ds,dv,du){cm(function(){da(dt,ds,dv,du)
62
- })};this.getNumTrackedPageViews=function(){return cx};this.trackPageView=function(ds,du,dt){cg=[];cT=[];cz=[];if(R(cc)){cm(function(){ad(aI,bO,cc)})}else{cm(function(){cx++;b6(ds,du,dt)})}};this.trackAllContentImpressions=function(){if(R(cc)){return}cm(function(){q(function(){var ds=w.findContentNodes();var dt=cH(ds);bK.pushMultiple(dt)})})};this.trackVisibleContentImpressions=function(ds,dt){if(R(cc)){return}if(!M(ds)){ds=true}if(!M(dt)){dt=750}aX(ds,dt,this);cm(function(){n(function(){var du=w.findContentNodes();var dv=bf(du);bK.pushMultiple(dv)})})};this.trackContentImpression=function(du,ds,dt){if(R(cc)){return}du=a(du);ds=a(ds);dt=a(dt);if(!du){return}ds=ds||"Unknown";cm(function(){var dv=aK(du,ds,dt);bK.push(dv)})};this.trackContentImpressionsWithinNode=function(ds){if(R(cc)||!ds){return}cm(function(){if(ck){n(function(){var dt=w.findContentNodesWithinNode(ds);var du=bf(dt);bK.pushMultiple(du)})}else{q(function(){var dt=w.findContentNodesWithinNode(ds);var du=cH(dt);bK.pushMultiple(du)
63
- })}})};this.trackContentInteraction=function(du,dv,ds,dt){if(R(cc)){return}du=a(du);dv=a(dv);ds=a(ds);dt=a(dt);if(!du||!dv){return}ds=ds||"Unknown";cm(function(){var dw=aU(du,dv,ds,dt);if(dw){bK.push(dw)}})};this.trackContentInteractionNode=function(du,dt){if(R(cc)||!du){return}var ds=null;cm(function(){ds=dj(du,dt);if(ds){bK.push(ds)}});return ds};this.logAllContentBlocksOnPage=function(){var du=w.findContentNodes();var ds=w.collectContent(du);var dt=typeof console;if(dt!=="undefined"&&console&&console.log){console.log(ds)}};this.trackEvent=function(dt,dv,ds,du,dx,dw){cm(function(){ax(dt,dv,ds,du,dx,dw)})};this.trackSiteSearch=function(ds,du,dt,dv){cg=[];cm(function(){ce(ds,du,dt,dv)})};this.setEcommerceView=function(dw,ds,du,dt){cA={};if(ac(du)){du=String(du)}if(!M(du)||du===null||du===false||!du.length){du=""}else{if(du instanceof Array){du=W.JSON.stringify(du)}}var dv="_pkc";cA[dv]=du;if(M(dt)&&dt!==null&&dt!==false&&String(dt).length){dv="_pkp";cA[dv]=dt}if(!ac(dw)&&!ac(ds)){return
64
- }if(ac(dw)){dv="_pks";cA[dv]=dw}if(!ac(ds)){ds=""}dv="_pkn";cA[dv]=ds};this.getEcommerceItems=function(){return JSON.parse(JSON.stringify(c9))};this.addEcommerceItem=function(dw,ds,du,dt,dv){if(ac(dw)){c9[dw]=[String(dw),ds,du,dt,dv]}};this.removeEcommerceItem=function(ds){if(ac(ds)){ds=String(ds);delete c9[ds]}};this.clearEcommerceCart=function(){c9={}};this.trackEcommerceOrder=function(ds,dw,dv,du,dt,dx){b4(ds,dw,dv,du,dt,dx)};this.trackEcommerceCartUpdate=function(ds){bz(ds)};this.trackRequest=function(dt,dv,du,ds){cm(function(){var dw=cy(dt,dv,ds);bM(dw,bQ,du)})};this.ping=function(){this.trackRequest("ping=1",null,null,"ping")};this.disableQueueRequest=function(){bK.enabled=false};this.setRequestQueueInterval=function(ds){if(ds<1000){throw new Error("Request queue interval needs to be at least 1000ms")}bK.interval=ds};this.queueRequest=function(ds){cm(function(){var dt=cy(ds);bK.push(dt)})};this.isConsentRequired=function(){return cI};this.getRememberedConsent=function(){var ds=aH(bj);
65
- if(aH(cU)){if(ds){b5(bj,bw,c6)}return null}if(!ds||ds===0){return null}return ds};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(dt){bJ=true;b5(cU,bw,c6);var du,ds;for(du=0;du<cT.length;du++){ds=typeof cT[du];if(ds==="string"){bM(cT[du],bQ)}else{if(ds==="object"){dn(cT[du],bQ)}}}cT=[];if(!M(dt)||dt){this.setCookieConsentGiven()}};this.rememberConsentGiven=function(du){if(du){du=du*60*60*1000}else{du=30*365*24*60*60*1000}var ds=true;this.setConsentGiven(ds);var dt=new Date().getTime();dm(bj,dt,du,bw,c6,bY,aN)};this.forgetConsentGiven=function(){var ds=30*365*24*60*60*1000;b5(bj,bw,c6);dm(cU,new Date().getTime(),ds,bw,c6,bY,aN);this.forgetCookieConsentGiven();this.requireConsent()};this.isUserOptedOut=function(){return !bJ};this.optUserOut=this.forgetConsentGiven;this.forgetUserOptOut=function(){this.setConsentGiven(false)
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
- "GenerateVisits": "إذا كنت لا تملك بيانات لليوم الحالي، فيمكنك أن تنشئ بعض البيانات باستخدام تطبيق %1$s. يمكنك تفعيل تطبيق %2$s، ثم النقر على قائمة \"مولد الزوا\" في لوحة إدارة Matomo.",
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
- "NbActionsDescription": "%s سلوك (عدد مشاهدات الصفحة، التحميلات، والروابط الصادرة)",
 
 
 
 
 
 
 
 
 
 
 
 
 
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": "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.MM.y {time}",
1193
  "Format_Date_Day_Month": "E, d MMM",
1194
  "Format_Date_Long": "EEEE, d MMMM y 'г'.",
1195
- "Format_Date_Short": "d.MM.y",
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": "Броят на потребителите, влезли във вашия уебсайт. Това е броят на уникалните активни потребители, които имат зададен User ID (чрез функцията за проследяващ код 'setUserId').",
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
- "Download": "Изтегли",
 
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
- "Plugin": "Добавка",
289
- "Plugins": "Добавки",
 
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
- "YourChangesHaveBeenSaved": "Промените бяха запазени."
 
 
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
- "GenerateVisits": "Ако не разполагате с данни за днес можете да генерирате такива с помощта на добавката %1$s. Вие можете да активирате добавката %2$s, след което натиснете на „Генератор на посещения“, намиращ се в менюто на администраторската среда на Matomo.",
 
 
 
489
  "KeepTokenSecret": "Това token_auth е тайна, като Вашето потребителско име и парола, %1$s не го споделяйте%2$s!",
490
- "LoadedAPIs": "Успешно заредени %s API-та",
491
- "MoreInformation": "За повече информация за Matomo API-тата, моля погледнете %1$s Въведение в Matomo API%2$s и %3$s Matomo API Референт%4$s.",
492
- "TopLinkTooltip": "Информацията за уеб анализите може да бъде достъпена чрез прост приложно-програмен интерфейс в json, xml и др. формат.",
493
- "UserAuthentication": "Удостоверяване на потребителя"
 
 
 
 
 
494
  },
495
  "Actions": {
 
 
 
496
  "AvgGenerationTimeTooltip": "Средно базирано на %1$s посещение(я) %2$s между %3$s и %4$s",
497
- "ColumnClicks": "Щраквания",
498
- "ColumnClicksDocumentation": "Брой щраквания на тази връзка",
 
 
 
 
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
- "ColumnSearches": "Търсачки",
511
- "ColumnSearchesDocumentation": "Брой посещения търсениза тази ключова дума от системата за търсене на твоя сайт.",
512
  "ColumnSearchExitsDocumentation": "Процент посещения, след които, потребителите са напуснали сайта, при търсене за тази ключова дума.",
513
  "ColumnSearchResultsCount": "Брой резултати от търсенето",
 
 
514
  "ColumnSiteSearchKeywords": "Уникални ключови думи",
515
  "ColumnUniqueClicks": "Уникални кликове",
516
  "ColumnUniqueClicksDocumentation": "Броят на посещенията които са кликнали на тази връзка. Ако на тази връзка е било кликано няколко пъти, при едно посещение, отчита се само веднъж.",
517
- "ColumnUniqueDownloads": "Уникални сваляния",
518
  "ColumnUniqueOutlinks": "Уникални изходящи",
519
- "DownloadsReportDocumentation": "В този отчет можете да видите файловете, които вашите посетители са изтеглили. %s Matomo отчита броя щракванията върху връзката за сваляне. Дали изтеглянето е завършено или не, не е ясно за Matomo.",
 
 
520
  "EntryPageTitles": "Входни заглавия",
521
  "EntryPageTitlesReportDocumentation": "Този отчет съдържа информация за заглавията на входните страници, които са били използвани през определен период.",
 
 
 
522
  "ExitPageTitles": "Изходни заглавия",
523
  "ExitPageTitlesReportDocumentation": "Този отчет съдържа информация за заглавията на изходните страници, които са били използвани през определен период.",
 
 
 
 
524
  "OneSearch": "1 търсене",
525
  "OutlinkDocumentation": "Изходящата връзка е връзка, която води посетителя извън Вашия сайт (към друг домейн).",
526
  "OutlinksReportDocumentation": "Този доклад показва йерархичен списък на изходящите адреси, които са избрани от посетителите.",
527
- "PagesReportDocumentation": "Този доклад включва информация за посетените връзки. %s Таблицата е организирана йерархично, връзките са показани като структура от папки.",
528
  "PageTitlesReportDocumentation": "Този доклад включва информация за заглавията на посетена страница. %1$s Заглавието на страницата е HTML %2$s таг, който се изобразява в заглавната част на повечето браузери.",
 
 
529
  "PageUrls": "URLs страница",
530
- "PluginDescription": "Показва отчет за броя посетени страници и техните заглавия. Позволява ви да видите заявките към търсачката на вашия сайт. Автоматично проследява щракванията върху външни връзки и изтегляне на файлове.",
 
 
 
 
 
 
 
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
- "Impressions": "Импресии",
577
- "InteractionRate": "Честота на взаимодействие",
 
578
  "ContentName": "Име на съдържанието",
 
 
 
 
 
579
  "ContentTarget": "Целево съдържание",
580
- "Contents": "Съдържание"
 
 
 
 
 
 
 
 
 
581
  },
582
  "CoreAdminHome": {
 
583
  "Administration": "Администрация",
584
  "ArchivingSettings": "Настройки за архивиране",
585
  "BrandingSettings": "Настройки на бранда",
 
 
586
  "ClickHereToOptIn": "Натиснете тук за съгласие.",
587
  "ClickHereToOptOut": "Натиснете тук за отказ.",
588
- "CustomLogoFeedbackInfo": "Ако модифицирате Matomo логото, може също да пожелаете да скриете %1$s връзката в главното меню. За да направите това, можете да изключите добавката за обратна връзка в страницата %2$sУправление на добавки%3$s.",
 
 
 
 
 
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": "Следните добавки не са съвместими с %1$s и не могат да бъдат заредени: %2$s.",
598
- "InvalidPluginsYouCanUninstall": "Може да обновите или деинсталирате тези добавки чрез %1$sУправление на добавките%2$s.",
599
- "JavaScriptTracking": "JavaScript Проследяване",
 
 
 
 
 
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
- "JSTrackingIntro2": "След като имате нужния JavaScript код за вашия сайт, го копирайте и поставете във всички страници, които искате да следите с Matomo.",
617
- "JSTrackingIntro4": "В случай, че не искате да използвате JavaScript за водене на статистика за посетителите %1$sгенерирай изображение под формата на проследяваща връзка по-долу%2$s.",
618
- "JSTrackingIntro5": "В случай, че желаете да събирате повече информация за посещенията, моля, вижте %1$sMatomo Javascript Tracking документацията%2$s, за списък с наличните функции. Използвайки тези функции може да следите цели, персонализирани променливи, поръчки, изоставени колички и други.",
 
 
 
619
  "LogoUpload": "Изберете логото за качване",
620
- "FaviconUpload": "Изберете Favicon за качване",
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": "Не е позволено да се променя стойността за настройка \"%1$s\" в добавка \"%2$s\"",
631
- "PluginSettingsIntro": "Тук могат да се променят настройките за следните добавки от трети страни:",
632
- "PluginSettingsValueNotAllowed": "Стойността за поле \"%1$s\" за добавка \"%2$s\" не е позволена",
633
- "SendPluginUpdateCommunicationHelp": "Ще бъде изпратено съобщение на привилигирован потребител когато е налична нова версия за добавка.",
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
634
  "StableReleases": "Ако Matomo е критично важен за вашият бизнес, използвайте последната стабилна версия. Ако използвате последна бета и откриете бъг или имате предложение, моля %1$sвижте тук%2$s.",
 
635
  "TrackAGoal": "Проследяване на цел",
636
  "TrackingCode": "Код за проследяване",
637
- "TrustedHostConfirm": "Сигурен ли сте, че желаете да промените доверен Matomoi хост име",
 
 
 
 
 
 
 
 
 
 
 
638
  "TrustedHostSettings": "Доверено Matomoi хост име",
 
 
 
639
  "UpdateSettings": "Настройки за обновяване",
640
  "UseCustomLogo": "Използвайте изработено лого",
641
  "ValidPiwikHostname": "Валидно Matomo хост име",
 
 
 
 
 
 
642
  "WithOptionalRevenue": "с опция за приходите",
643
- "YouAreOptedOut": "В момента сте отказали",
 
644
  "YouMayOptOut": "Можете да изберете да нямате уникална уеб анализ бисквитка с идектификационен номер, свързан към вашият компютър, за да избегнете агрегацията на анализ на събраната информация на този уеб сайт.",
645
- "YouMayOptOutBis": "За да направите този избор, моля кликнете долу за да получите биксвитката за отказване.",
646
  "YouMayOptOut2": "Имате възможност да забраните Вашите действия да бъдат анализирани и свързани с Вас.",
647
- "YouMayOptOut3": "Това ще защити Вашето лично пространство, но ще попречи на собственика да се обучи от Вашите действия и да подобри възможностите за обслужване за Вас и за други потребители."
 
648
  },
649
  "CoreHome": {
 
 
650
  "CategoryNoData": "Няма данни в тази категория. Опитайте \"Включи всички данни\".",
 
 
 
651
  "CheckForUpdates": "Проверка за обновления",
652
  "CheckPiwikOut": "Проверка на Matomoi изход!",
653
- "ClickToEditX": "Щракни за промяна на %s",
 
 
 
 
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
- "InjectedHostSuperUserWarning": "Възможно е конфигурацията на Matomo да е неправилна (това се случва когато Matomo е бил изместен на нов сървър или друг адрес). Вие можете или %1$sда щракнете тук и да добавите %2$s като валиден Matomo адрес (ако сте сигурни в достоверността му)%3$s, или %4$sда щракнете тук и да посетите %5$s, за да достъпите Matomo безпасно%6$s.",
 
668
  "InjectedHostWarningIntro": "В момента достъпвате Matomo от %1$s, но Matomo е настроен да работи чрез този адрес: %2$s.",
669
- "JavascriptDisabled": "JavaScript трябва да бъде разрешен за да използвате Matomo в стандартен изглед.<br \/>Същото е ако JavaScript не е разрешен или браузъра не го поддържа.<br \/>За да използвате стандартен изглед разрешете JavaScript от настройките на Вашия браузър и %1$sопитайте отново%2$s.<br \/>",
 
 
 
 
 
670
  "Menu": "Меню",
 
671
  "NoPrivilegesAskPiwikAdmin": "Вие се логнахте в като '%1$s' но изглежда че нямате разрешение от Matomo. %2$s Попитайте Вашият Matomo администратор (клик на email)%3$s да Ви даде \"поглед\" достъп до сайта.",
 
 
 
 
 
 
672
  "PeriodRange": "Период",
 
 
 
 
 
 
673
  "ReportGeneratedOn": "Доклада е генериран за %s",
674
  "ReportGeneratedXAgo": "Доклада е генериран преди %s",
675
- "SharePiwikLong": "Здравейте! Туко-що открих прекрасен софтуер с отворен код: Matomo! Matomo позволява проследяването на посетителите на даден сайт безплатно. Задължително трябва да го пробвате!",
 
 
 
 
 
 
 
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
- "SystemSummaryPhpVersion": "PHP версия"
688
  },
689
  "CorePluginsAdmin": {
690
  "ActionUninstall": "Деинсталиране",
691
  "Activate": "Активирай",
 
692
  "Activated": "Активиран",
693
  "Active": "Активни",
694
  "Activity": "Активност",
 
 
 
 
695
  "AuthorHomepage": "Начало на автор",
 
 
696
  "Changelog": "Списък с промените",
697
- "ChangeSettingsPossible": "Промяна на %1$sнастройките%2$s за тази добавка.",
698
- "CorePluginTooltip": "Основните добавки нямат версия, тъй като се разпространяват с Matomo.",
 
 
699
  "Deactivate": "Деактивирай",
700
- "DoMoreContactPiwikAdmins": "За да се инсталира нова добавка или нова тема, трябва да се свържете с вашия администратор, който отговаря за Matomo.",
 
701
  "History": "История",
702
  "Inactive": "Неактивни",
703
- "InfoPluginUpdateIsRecommended": "Обновете вашите добавки, за да се възползвате от най-новите подобрения.",
704
  "InfoThemeIsUsedByOtherUsersAsWell": "Забележка: други %1$s потребители регистрирани в този Matomo също използват тапет %2$s.",
705
  "InfoThemeUpdateIsRecommended": "Обновете вашите тапети, за да получите последната версия.",
706
- "InstallNewPlugins": "Инсталиране на нови добавки",
707
  "InstallNewThemes": "Добави нови тапети",
 
 
 
708
  "LicenseHomepage": "Начало на лиценз",
709
- "PluginsExtendPiwik": "Добавките разширяват функционалността на Matomo.",
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
- "PluginHomepage": "Сайт на добавката",
719
- "PluginNotCompatibleWith": "%1$s добавка не е съвместима с %2$s.",
720
- "PluginNotWorkingAlternative": "Ако сте използвали тази добавка, може би ще намерите по-нова версия в магазина за приложения. В случай, че няма по-нова версия, може би ще желаете да деинсталирате добавката.",
 
 
 
 
 
721
  "PluginRequirement": "%1$s изисква %2$s.",
722
- "PluginsManagement": "Управление на добавките",
 
 
723
  "Status": "Състояние",
724
  "SuccessfullyActicated": "Успешно беше активирано <strong>%s<\/strong>.",
725
- "TeaserExtendPiwik": "Разширете възможностите на Matomo с добавки и тапети",
726
- "TagManagerNowAvailableTitle": "Matomo Tag Manager вече е достъпен",
727
- "ActivateTagManagerNow": "Активирайте Tag Manager сега",
728
- "WhatIsTagManager": "Какво е Tag Manager?",
729
  "TagManagerLearnMoreInUserGuide": "Научете повече в ръководството на Tag Manager",
730
- "WhyUsingATagManager": "Защо Tag Manager?",
731
- "AreThereAnyRisks": "Има ли някакви рискове?",
 
 
 
 
 
 
732
  "Theme": "Тапет",
733
  "Themes": "Тапети",
734
  "ThemesDescription": "Тапетите могат да променят въшншия вид на потребителския интерфейс на Matomo и да осигурят ново пълноценно визуално усещане, за да се насладите на Вашите статистики.",
735
  "ThemesManagement": "Управление на тапетите",
736
- "UninstallConfirm": "Вие сте на път да деинсталирате добавката %s. Добавката ще бъде напълно премахната от вашата платформа и няма да може да бъде възстановена. Наистина ли искате да направите това?",
 
737
  "Version": "Версия",
738
- "Websites": "Сайтове"
 
 
 
 
 
 
 
 
 
739
  },
740
  "CoreUpdater": {
741
- "CheckingForPluginUpdates": "Проверка за актуализирани добавки",
 
742
  "ClickHereToViewSqlQueries": "Кликнете тук за да видите и да копирате SQL заявките и командите в конзолата , които ще бъдат изпълнени.",
 
 
 
 
 
 
 
 
743
  "CriticalErrorDuringTheUpgradeProcess": "Открита е КРИТИЧНА грешка по време на обновяването:",
744
  "DatabaseUpgradeRequired": "Необходимо е да се обнови базата от данни (БД)",
745
- "DisablingIncompatiblePlugins": "Изключване на несъвместими добавки: %s",
 
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": "Налични са обновления за вашите Matomo добавки",
773
  "PiwikHasBeenSuccessfullyUpgraded": "Matomo успешно е обновен!",
774
  "PiwikUpdatedSuccessfully": "Обновлението на Matomo завърши успешно!",
775
  "PiwikWillBeUpgradedFromVersionXToVersionY": "Matomo базата от данни (БД) ще бъде обновена от %1$s версия към %2$s.",
 
 
776
  "ReadyToGo": "Готови ли сте?",
777
- "TheFollowingPluginsWillBeUpgradedX": "Следните добавки ще бъдат обновени: %s.",
 
 
 
 
 
 
778
  "TheUpgradeProcessMayFailExecuteCommand": "Ако имате голяма Matomo база данни, актуализирането и може да отнеме прекалено много време, ако я стартирате през Вашият браузър. В този случай, можете да извършите актуализацията чрез команден ред: %s",
779
  "TheUpgradeProcessMayTakeAWhilePleaseBePatient": "Обновяването на базата от данни (БД) отнема известно време! Бъдете търпеливи...",
780
- "ThereIsNewPluginVersionAvailableForUpdate": "Някои от добавките, които използвате, са обновени в магазина:",
781
- "ThereIsNewVersionAvailableForUpdate": "Открита е нова версия на Matomo, можете да обновите!",
 
 
 
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": "Автоматично са деактивирани следните добавки: %s",
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 с добавки %2$s активиран",
851
- "WidgetPlugins": "Добавки",
852
- "WidgetPluginsDocumentation": "Този отчет показва каква добавка на браузъра са използвали вашите посетители. Тази информация може да е важна, за да изберете правилния начин за доставяне на вашето съдържание."
 
 
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
- "DevicesDetection": "Устройства, които използва посетителят",
 
875
  "DeviceType": "Вид устройство",
 
 
 
 
 
 
 
 
 
 
 
 
876
  "OperatingSystemFamilies": "Вид операционна система",
 
877
  "OperatingSystemFamily": "Семейство на оперативната система",
878
- "OperatingSystems": "Операционни системи",
879
  "OperatingSystemVersions": "Версия на операционната система",
 
 
 
 
 
 
 
880
  "SmartDisplay": "„Умен“ дисплей",
 
881
  "Smartphone": "Смартфон",
882
- "Devices": "Устройства",
883
- "Tablet": "Таблет",
884
  "TV": "ТВ",
 
 
 
 
885
  "WidgetBrowsers": "Браузъри на посетителите",
886
- "WidgetBrowserVersionsDocumentation": "Този отчет показва информация, за това какъв браузър са използвали вашите потребители. Всеки браузер е показан поотделно."
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
887
  },
888
  "Ecommerce": {
889
- "Sales": "Продажби"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
- "Forums": "Форуми",
918
- "NotTrackingVisits": "Matomo не проследява посещенията"
 
 
 
 
919
  },
920
  "GeoIp2": {
921
  "AssumingNonApache": "Не може да бъде намерена apache_get_modules функцията, което предполага, че това не е Apache сървър.",
 
 
 
922
  "CannotFindGeoIPServerVar": "Променливата %s не е зададена. Възможно е сървърът да не е настроен правилно.",
923
  "CannotListContent": "Съдържанието за %1$s: %2$s не може да бъде заредено",
924
- "DownloadingDb": "Сваляне %s",
 
925
  "DownloadNewDatabasesEvery": "Обновяване на базата от данни на всеки",
 
 
926
  "FoundApacheModules": "Matomo откри следните Apache модули",
927
- "GeoIPImplHasAccessTo": "Тази реализация на GeoIP има достъп до следните типове бази данни",
928
  "GeoIPDatabases": "GeoIP база данни",
 
 
 
 
929
  "GeoIPNoServerVars": "Matomo не може да намери GeoIP %s променливи.",
930
  "GeoIPServerVarsFound": "Matomo засече следните GeoIP %s променливи",
931
- "HowToSetupGeoIPIntro": "Изглежда, че настройката, за определяне на местоположението, не е направена. Това е полезна функция и без нея няма да се вижда точна и пълна информация за местоположението на посетителите. Ето и начин, по който може бързо да започнете да го използвате:",
 
 
 
932
  "HowToInstallApacheModule": "Как да инсталирам GeoIP модул за Apache?",
933
  "HowToInstallNginxModule": "Как се инсталира GeoIP модул за Nginx?",
 
 
 
 
 
 
934
  "HttpServerModule": "HTTP сървърен модул",
935
- "InvalidGeoIPUpdatePeriod": "Невалиден период за обновяването на GeoIP: %1$s. Валидните стойности са %2$s.",
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
- "DefaultGoalConvertedOncePerVisit": "(По подразбиране) Целта може да бъде конвертирана само веднъж на посещение.",
 
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
- "ManageGoals": "Управление на целите",
 
1002
  "GoalsOverview": "Общ преглед на целите",
1003
  "GoalsOverviewDocumentation": "Това е преглед на конверсията на вашите цели. Поначало, графиката показва сумата от всички ваши конверсии. %s Под графиката ще видите отчетите за конверсия на всички ваши цели. Блестящите линии можете да уголемите като кликнете върху тях.",
1004
- "GoalX": "Цел %s",
 
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
- "Products": "Продукти",
 
 
1018
  "ProductSKU": "SKU на продукта",
 
 
1019
  "ReturningVisitorsConversionRateIs": "Стойност на конверсията от върналите се посетители е %s",
 
1020
  "SingleGoalOverviewDocumentation": "Това е преглед на конверсиите за една цел. %s Блестящите линии могат да бъдат уголемени като кликнете върху тях.",
1021
- "UpdateGoal": "Обнови цел",
 
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
- "CollaborativeProject": "Matomo е съвместен проект, изграден с много любов от хора от всички краища на света.",
1049
- "ConfirmDeleteExistingTables": "Наистина ли искате да изтриете следните таблици: %s от базата от данни (БД)? ПРЕДУПРЕЖДЕНИЕ: ДАННИТЕ ОТ ТАЗИ ТАБЛИЦА НЕ МОГАТ ДА БЪДАТ ВЪЗСТАНОВЕНИ!!!",
 
 
 
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": "Върнете се за да зададете Prefix за Matomo таблиците в базата от данни (БД)",
1066
  "HappyAnalysing": "Приятно анализиране!",
 
 
1067
  "Installation": "Инсталация",
1068
  "InstallationStatus": "Състояние на инсталацията",
1069
- "InsufficientPrivilegesHelp": "Можете да добавите тези привилегии, като използвате инструмент, като например phpMyAdmin или като стартирате правилната SQL поръчка. Ако не знаете как се правят тези неща, попитайте вашият системен администратор да ви даде тези привилегии.",
1070
- "JSTracking_EndNote": "Бележка: След инсталационният процес, можете да генерирате проследяващ код от администраторската секция %1$sПроследяващ код%2$s",
 
 
1071
  "JSTracking_Intro": "За да може да се осъществи проследяване на трафика посредством Matomo, е нужно да се добави допълнителен код във всяка от вашите страници.",
1072
- "LargePiwikInstances": "Помощ за големи Matomo случаи",
 
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
- "SeeBelowForMoreInfo": "Вижте по-долу за повече информация.",
1085
- "SetupWebsite": "Настройки на сайт",
1086
- "SetupWebsiteError": "Възникнала е грешка при добавянето на сайт",
1087
- "SetupWebsiteSetupSuccess": "Сайта %s е добавен успешно!",
1088
- "SiteSetup": "Моля, настройте първият сайт, за който желаете да водите статистика посредством Matomo:",
1089
- "SiteSetupFootnote": "Забележка: след като инсталацията на Matomo е приключила, ще имате възможност да добавите допълнителни сайтове, които да следите!",
 
 
 
1090
  "SuperUser": "Супер потребител",
1091
- "SuperUserSetupError": "Възникна грешка при добавянето на привилигирован потребител",
1092
- "SuperUserSetupSuccess": "Супер потребителят беше създаден успешно!",
 
1093
  "SystemCheck": "Проверка на системата",
1094
- "SystemCheckAutoUpdateHelp": "Забележка: Matomo One Click обновяване изисква разрешение за папката Matomo и нейното съдържание.",
1095
- "SystemCheckDatabaseHelp": "Необходимо е за да инстаалирате Matomo базата от данни(БД) да поддържа mysqli или PDO и pdo_mysql разширенията.",
 
 
 
 
 
 
 
 
 
1096
  "SystemCheckDebugBacktraceHelp": "View::factory няма да бъде в състояние да създаде мнение за извикване на модул.",
1097
- "SystemCheckError": "Открита е грешка - трябва да бъде поправена преди да преминете нататък",
1098
- "SystemCheckEvalHelp": "Изисква се от HTML QuickForm и Smarty темплейт системата.",
1099
  "SystemCheckExtensions": "Други необходими разширения",
1100
  "SystemCheckFileIntegrity": "Файл целостта",
 
1101
  "SystemCheckFunctions": "Необходими функции",
1102
- "SystemCheckGDFreeType": "GD > 2.x + Freetype (графики)",
1103
  "SystemCheckGDHelp": "„Блещукащите линии“ (малки графики) и графичните диаграми (в Matomo Mobile приложението и докладите по пощата), няма да работят.",
1104
- "SystemCheckGlobHelp": "Вградената функция е изключена от Вашият хостинг. Matomo ще се опитва да подражава на тази функция, но може да се сблъска с допълнителни ограничения за сигурност. Функционалността може да бъде засегната.",
1105
- "SystemCheckGzcompressHelp": "Трябва да активирате zlib и gzcompress разширенията.",
1106
- "SystemCheckGzuncompressHelp": "Трябва да активирате zlib и gzcompress разширенията.",
1107
- "SystemCheckMailHelp": "Модулите Обратна връзка и Забравена парола не биха работили без mail() функцията на PHP.",
 
 
1108
  "SystemCheckMemoryLimit": "Лимит на паметта",
1109
  "SystemCheckMemoryLimitHelp": "За силно натоварените сайтове, времето за архивиране на данните отнема повече ресурси. Ако е необходимо моля редактирайте memory_limit директивата в php.ini.",
 
 
1110
  "SystemCheckOpenURL": "Отворен адрес(URL)",
1111
- "SystemCheckOpenURLHelp": "Новините, съобщенията за обновления и автоматичното обновяване за да функционират е необходимо сървъра да поддържа \"curl\" разширение, allow_url_fopen=On, или fsockopen() да бъдат поддържани.",
1112
  "SystemCheckOtherExtensions": "Други разширения",
1113
  "SystemCheckOtherFunctions": "Други функции",
1114
- "SystemCheckPackHelp": "Функцията \\\"pack()\\\" е нужна, за да следите посетителите в Matomo.",
1115
- "SystemCheckParseIniFileHelp": "Вградената функция е изключена от Вашият хостинг. Matomo ще се опитва да подражава на тази функция, но може да се сблъска с допълнителни ограничения за сигурност. Следването на изпълнението също ще бъде засегнато.",
1116
- "SystemCheckPdoAndMysqliHelp": "За Linux сървър компилирайте php със следните опции: %1$s във Вашия php.ini, добавете следните редове: %2$s",
 
 
1117
  "SystemCheckPhp": "PHP версия",
1118
  "SystemCheckPhpPdoAndMysqli": "Повече информация: %1$sPHP PDO%2$s и %3$sMYSQLI%4$s.",
1119
- "SystemCheckSummaryNoProblems": "Ура-а-а! Няма проблем с настройката на вашия Matomo. Успокойте се, всичко е наред.",
1120
- "SystemCheckSummaryThereWereWarnings": "Има проблеми, които засягат вашата система. Matomo ще работи, но може да срещнете някои дребни трудности при работа.",
1121
- "SystemCheckTimeLimitHelp": "За силно натоварените сайтове, времето за архивиране на данните отнема повече време. Ако е необходимо моля редактирайте max_execution_time директивата в php.ini файла.",
 
 
 
 
 
1122
  "SystemCheckTracker": "Статус на проследяване",
1123
- "SystemCheckWarnDomHelp": "Трябва да включите \"dom\" разширенето (напр: install the \"php-dom\" и\/или \"php-xml\" пакета).",
1124
- "SystemCheckWarning": "Matomo ще работи нормално, но някои услуги ще липсват",
 
 
 
 
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": "Трябва да конфигурирате PHP \"zlib\" да се поддържа, --with-zlib.",
1131
- "NotSupported": "не се поддържа",
1132
  "Tables": "Създаване на таблици",
1133
- "TablesCreatedSuccess": "Таблиците са създадени успешно!",
1134
  "TablesDelete": "Изтрий съществуващите таблици",
1135
- "TablesDeletedSuccess": "Съществуващите Matomo таблици бяха изтрити усшешно",
1136
- "TablesFound": "Следните таблици бяха открити в базата от данни (БД)",
1137
  "TablesReuse": "Използвай съществуващите таблици",
1138
- "TablesUpdatedSuccess": "Базата от данни беше успешно обновена от %1$s до %2$s!",
1139
- "TablesWarningHelp": "Изберете дали да обновите данните в съществуващите таблици или да инсталирате Matomo на чисто.",
1140
- "TablesWithSameNamesFound": "Някои %1$s таблици в базата от данни (БД) %2$s имат същите имена, както тези, които Matomo се опитва да създаде",
1141
- "WeHopeYouWillEnjoyPiwik": "Надяваме се, че ще се радвате на работата с Matomo толкова, колкото ние се радваме при разработването на Matomo.",
1142
- "Welcome": "Добре дошли!",
1143
- "WelcomeToCommunity": "Добре дошли в Matomo общността!"
 
 
 
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
- "ClickToViewMoreAboutVisit": "Щракнете, за да видите повече информация за това посещение",
 
 
 
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
- "RealTimeVisitors": "Посещения в реално време",
 
 
 
 
 
2283
  "RealTimeVisitorCount": "Броене на посетителите в реално време",
 
2284
  "Referrer_URL": "URL Референции",
 
 
 
 
 
2285
  "ShowMap": "покажи картата",
2286
- "SimpleRealTimeWidget_Message": "%1$s и %2$s в последното %3$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
- "InvalidOrExpiredToken": "Token е грешен или изтекъл",
2299
- "InvalidUsernameEmail": "Грешно потребителско име и\/или имейл адрес",
 
 
 
 
 
 
 
2300
  "LogIn": "Вход",
2301
- "LoginPasswordNotCorrect": "Потребителското име & Паролата не са верни",
 
 
 
2302
  "LostYourPassword": "Забравена парола?",
 
2303
  "MailTopicPasswordChange": "Потвърждение смяната на паролата",
 
 
 
2304
  "PasswordChanged": "Вашата парола е сменена.",
2305
  "PasswordRepeat": "Парола (повторно)",
 
2306
  "PasswordsDoNotMatch": "Паролите не съвпадат.",
2307
- "RememberMe": "Запомни ме"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2308
  },
2309
  "Marketplace": {
2310
- "ActivateLicenseKey": "Активирай",
2311
- "ActionActivatePlugin": "Активиране на добавка",
2312
  "ActionActivateTheme": "Активирай тапет",
2313
  "ActionInstall": "Инсталиране",
2314
- "AllowedUploadFormats": "Може да качите добавка или тапет в zip формат посредством тази страница.",
 
 
 
2315
  "Authors": "Автори",
2316
- "Browse": "Разглеждане",
2317
  "BackToMarketplace": "Връщане към магазина за приложения",
 
2318
  "BrowseMarketplace": "Разгледайте магазина",
2319
  "ByXDevelopers": "от %s разработчици",
 
 
 
 
 
2320
  "Developer": "Разработчик",
2321
- "Marketplace": "Магазин",
2322
- "FeaturedPlugin": "Препоръчана добавка",
 
 
 
 
 
 
 
 
 
2323
  "InstallingPlugin": "Инсталира се %s",
2324
  "LastCommitTime": "(последен принос %s)",
2325
  "LastUpdated": "Последно обновена",
2326
- "NotAllowedToBrowseMarketplacePlugins": "Може да разгледате списъка с добавки, които могат да бъдат инсталирани, за да настроите или разширите вашата Matomo платформа. Моля, свържете се с вашия системен администратор, ако желаете да бъде инсталирана някоя добавка.",
2327
- "NotAllowedToBrowseMarketplaceThemes": "Може да разгледате списъка с тапети, които могат да бъдат инсталирани, за да променят изгледа на Matomo. Моля, свържете се с вашия системен администратор, за да извърши инсталацията им.",
2328
- "NoPluginsFound": "Не е намерена добавка",
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2329
  "NoThemesFound": "Не са намерени тапети",
 
 
 
 
2330
  "NumDownloadsLatestVersion": "Последна версия:%s сваляния",
 
 
 
 
 
 
 
 
 
 
2331
  "PluginKeywords": "Ключови думи",
 
 
 
2332
  "PluginUpdateAvailable": "Използва се версия %1$s и е налична нова версия %2$s.",
 
2333
  "PluginVersionInfo": "%1$s от %2$s",
2334
- "PluginWebsite": "Сайт за добавки",
 
 
 
 
2335
  "Screenshots": "Екранни снимки",
2336
- "StepDownloadingPluginFromMarketplace": "Сваляне на добавка от магазина за приложения",
 
 
 
 
 
 
 
 
2337
  "StepDownloadingThemeFromMarketplace": "Сваляне на тапет от магазина за приложения",
2338
- "StepUnzippingPlugin": "Добавката се разархивира",
2339
- "StepUnzippingTheme": "Тапетът се разархивира",
2340
- "StepThemeSuccessfullyInstalled": "Вие успешно инсталирахте тапет %1$s %2$s.",
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
- "Settings_DeleteAccountConfirm": "Сигурни ли сте, че искате да изтриете този SMS профил?",
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
- "SettingsMenu": "Мобилни съобщения",
2380
- "TopLinkTooltip": "Вземете Web Analytics Reports доставен във вашата пощенска кутия или във вашия мобилен телефон!",
2381
  "TopMenu": "Доклади по имейл и SMS",
2382
- "VerificationText": "Кодът е %1$s. За да потвърдите вашия телефонен номер и да получите Matomo SMS отчети, моля, копирайте този код във формата достъпна чрез Matomo > %2$s > %3$s."
 
2383
  },
2384
  "MultiSites": {
 
2385
  "Evolution": "Развитие",
 
 
 
 
 
 
2386
  "LoadingWebsites": "Зарежда сайтовете",
 
 
2387
  "TopLinkTooltip": "Сравнете статистиката за всички ваши уебсайтове."
2388
  },
2389
  "Overlay": {
2390
  "Clicks": "%s клика",
2391
- "ClicksFromXLinks": "%1$s щраквания от една от %2$s връзките",
2392
  "Domain": "Домейн",
 
 
2393
  "ErrorNotLoadingDetails": "Възможно е заредената страница вдясно да няма последяващия Matomo код. В този случай опитайте да стартирате нова връзка за различна страница от доклада на страници.",
2394
- "ErrorNotLoadingLink": "Щраквайки тук, ще получите повече съвети за отстраняване на проблеми",
 
2395
  "Link": "Връзка",
2396
  "Location": "Местоположение",
2397
  "NoData": "Няма данни за тази страница по време на избрания период.",
2398
  "OneClick": "1 клик",
2399
  "OpenFullScreen": "Цял екран (без странична лента)",
 
 
 
2400
  "RedirectUrlErrorAdmin": "Може да добавите домейнът като допълнителен адрес %1$sв настройките%2$s.",
2401
  "RedirectUrlErrorUser": "Попитайте вашият администратор да добави домейна, като допълнителен URL."
2402
  },
2403
  "PagePerformance": {
2404
- "ColumnTimeServer": "Сървърно време (на сървъра)"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
- "DeleteOldRawData": "Редовно изтриване на стари данни",
2415
  "DeleteLogDescription2": "Ако включите автоматичното изтриване на логове, трябва да сте сигурни, че всичките предишни дневни отчети са били преработени, за да не се изгуби информация.",
 
2416
  "DeleteLogsOlderThan": "Изтрий отчети по-стари от",
2417
  "DeleteMaxRows": "Максималният брой редове, които да бъдат изтрити на един път:",
2418
  "DeleteMaxRowsNoLimit": "без лимит",
 
 
 
 
2419
  "DeleteReportsConfirm": "На път сте да включите изтриване на отчетите. Ако старите отчети са изтрити, вие ще трябвате да ги изготвите наново за да ги видите. Сигурни ли сте, че искате да направите това?",
 
 
2420
  "DeleteReportsOlderThan": "Изтрива отчети по-стари от",
2421
- "DeleteDataSettings": "Изтриване на старите потребителски логове и отчети",
 
 
 
2422
  "DoNotTrack_Description": "Не проследявай е технология и предложение, което позволява отказ от проследяване на сайтове, които те не посещават; включително инструменти за анализ, рекламни мрежи и социални платформи.",
2423
- "DoNotTrack_Disable": "Изключете \"Не проследявай\" поддръжката.",
2424
- "DoNotTrack_Enable": "Включете \"Не проследявай\" поддръжката.",
 
 
2425
  "DoNotTrack_Enabled": "Понастоящем вие уважавате поверителността на вашите потребители. Браво!",
2426
- "DoNotTrack_SupportDNTPreference": "Поддръжка на \"Не проследявай\" настройки.",
 
2427
  "EstimatedDBSizeAfterPurge": "Изчислен размер на базата данни след изтриване",
2428
  "EstimatedSpaceSaved": "Изчислено спестено място",
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2429
  "GdprManager": "Управление на GDPR",
 
 
 
 
 
 
 
 
 
 
2430
  "GetPurgeEstimate": "Изчисляване на времето за изтриване",
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2431
  "KeepBasicMetrics": "Запазване на основните данни (посещения, посещения на страници, степен на отпадане, цели, конверсия при електронна търговия и др.)",
2432
- "KeepReportSegments": "За да запазите горната информация, също запазете сегментите на отчета.",
 
 
 
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
- "SubmenuSearchEngines": "Търсачки & Ключови думи",
 
 
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
- "YouMustBeLoggedInToCreateSegments": "Трябва да сте вписани, за да създавате и редактирате персонализираните посетителски сегменти.",
2569
- "Test": "Тест"
 
 
2570
  },
2571
  "SitesManager": {
 
2572
  "AddSite": "Добави нов сайт",
2573
  "AdvancedTimezoneSupportNotFound": "Разширена часова зона поддръжка не е намерена в PHP (поддържа в по-нова версия на PHP от 5.2 или точно 5.2). Все още можете да изберете ръчно UTC.",
2574
- "AliasUrlHelp": "Препоръчително е, но не е задължително, да се уточнят различните URL адреси, по един на ред, че Вашите посетители имат достъп до този сайт. Наричани още URL адреси за сайта няма да се появяват в Референции > Сайтове. Имайте в предвид, че не е необходимо да се уточнят URL адреси със и без \\\"WWW\\\" като Matomo автоматично смята така.",
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
- "NoWebsites": "Вие нямате сайт, който да администрирате.",
 
 
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
- "Engagement": "Ангажимент",
 
 
 
 
 
2660
  "BrowseMarketplace": "Разгледайте магазина",
2661
- "CompletionTitle": "Браво!"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
- "TransitionsSubcategoryHelp2": "Детайли"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2687
  },
2688
  "UserCountry": {
2689
  "CannotLocalizeLocalIP": "IP адрес %s е вътрешен (частен) адрес и не може да бъде определено местоположението му.",
2690
  "City": "Град",
2691
  "CityAndCountry": "%1$s, %2$s",
2692
  "Continent": "Континент",
 
2693
  "Country": "Държава",
2694
- "country_a1": "Анонимно прокси",
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
- "getCityDocumentation": "Този отчет показва в кои градове са се намирали вашите посетители, при достъпването на сайта.",
2706
- "getContinentDocumentation": "Този отчет показва кое съдържание са разглеждали вашите посетители, при достъпването на сайта.",
2707
- "getCountryDocumentation": "Този отчет показва в коя държава са се намирали вашите посетители, при достъпването на сайта.",
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
- "WidgetLocation": "Местонахождение на посетителя"
 
 
 
 
 
 
 
 
 
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$p посещения от %3$c вашето местоположение не може да бъде открито.",
2736
  "VisitorMap": "Карта на посетителите",
 
 
2737
  "WorldWide": "По целия свят",
2738
  "map": "карта"
2739
  },
2740
  "UserId": {
2741
- "UserReportTitle": "Потребители"
 
 
 
 
 
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
- "MenuUsers": "Потребители",
2774
  "MenuUserSettings": "Потребителски настройки",
2775
- "NoteNoAnonymousUserAccessSettingsWontBeUsed2": "Бележка: Не можете да променяте настройките в тази секция, защото нямате никакви сайтове с разрешен достъп за анонимни потребители.",
 
 
 
 
 
 
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
- "NbUniqueDownloadsDescription": "уникални сваляния",
 
 
 
 
 
2861
  "NbUniqueVisitors": "уникални посетители",
 
 
2862
  "NbVisitsDescription": "посещения",
 
2863
  "VisitsSummary": "Резюме на посещенията",
2864
  "VisitsSummaryDocumentation": "Това е преглед на еволюцията на посещенията.",
2865
- "WidgetLastVisits": "Последни посетители",
 
2866
  "WidgetOverviewGraph": "Резюме с графика",
2867
  "WidgetVisits": "Резюме на посещенията"
2868
  },
2869
  "WebsiteMeasurable": {
2870
  "Website": "Сайт",
 
2871
  "Websites": "Сайтове"
2872
  },
2873
  "Widgetize": {
2874
  "OpenInNewWindow": "Отвори в нов прозорец",
2875
- "TopLinkTooltip": "Запазете Matomo докладите като джаджи и вградете таблото във вашето приложение като iframe."
 
 
 
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 &amp;lt;title&amp;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 към &lt;\/head&gt; маркер, който често се дефинира в '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 адрес за експортиране, ще трябва да посочите означение за удостоверяване на приложението. Можете да конфигурирате тези токени в Администратор -&gt; Сигурност -&gt; Удостоверяване на токени.",
995
+ "ExportTooltipWithLink": "Забележка: За да използвате генерирания URL адрес за експортиране, ще трябва да посочите означение за удостоверяване на приложението. Можете да конфигурирате тези токени в %1$s[Администратор -&gt; Сигурност -&gt; Токени]%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 &gt; %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": "Можете да деактивирате тези персонализирани шаблони от „Администрация =&gt; Общи настройки“, след като активирате Мениджъра на тагове. Като алтернатива можете също да ограничите използването на тези шаблони само до конкретни потребители или супер потребители.",
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 проследява уебсайтове с висок трафик (например &gt; 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 &gt; 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 дни. Супер потребител може да промени тази настройка, като отиде на Администрация =&gt; Поверителност.",
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 &gt; %2$s &gt; %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": "Търсачки &amp; Ключови думи",
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, ще видите кои потребители и действия са съответствали на Вашия параметър &amp;segment=.",
3921
+ "CustomUnprocessedSegmentNoData": "За да видите данни за този сегмент, трябва да създадете този сегмент ръчно в редактора на сегменти, след което да изчакате няколко часа, за да завърши предварителната обработка.",
3922
+ "DataAvailableAtLaterDate": "Вашите сегментирани аналитични отчети ще бъдат налични по-късно. Извиняваме се за причиненото неудобство.",
3923
  "DefaultAllVisits": "Всички посещения",
3924
+ "DragDropCondition": "Състояние „Плъзгане &amp; Пускане“",
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 адреси за сайта няма да се появяват в Референции &gt; Сайтове. Имайте в предвид, че не е необходимо да се уточнят 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": "Отидете на Поведение =&gt; Страници и кликнете в долната част на отчета върху иконата на зъбно колело, за да изравните отчета. Изравненият отчет променя йерархията от групиран отчет в списък.",
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": "Afegir",
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 transit 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 instal·lacions grans de Matomo, es pot %1$sconfigurar una %2$stasca programada per processar les entrades automàticament.",
 
19
  "AuthenticationMethodSmtp": "Mètode d'autenticació SMTP",
20
  "AverageOrderValue": "Valor mig de les comandes",
21
  "AveragePrice": "Preu mig",
22
- "AverageQuantity": "Qualitat mitja",
 
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·lar",
27
  "CannotUnzipFile": "No es pot descomprimir el fitxer %1$s: %2$s",
 
28
  "ChangePassword": "Canvia la contrasenya",
29
- "ChangeTagCloudView": "Si us plau, tingueu en compte que podeu veure l'informe en altres formes que en nuvol d'etiquetes. Feu servir els controls al peu de l'informe per fer-ho.",
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": "Fes clic aquí per més informació.",
35
- "ClickToSearch": "Cliqueu per cercar",
 
36
  "Close": "Tanca",
37
  "ColumnActionsPerVisit": "Accions per visita",
38
- "ColumnActionsPerVisitDocumentation": "El número mig d'accions (pàgines vistes, descarregues o enllaços de sortida) que s'han fet durant les visites.",
39
- "ColumnAverageTimeOnPage": "Temps mig a la pàgina",
 
 
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 mitja de una visita.",
43
- "ColumnBounceRate": "Raó de rebots",
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 número 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.",
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": "Número de visites que han començat en aquesta pàgina.",
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": "Número de visites que acaben en aquesta pàgina.",
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 número d'accions que han realitzat els vostres visitant. Les accions poden ser pàgines vistes, descarregues o enllaços externs.",
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 número de vegades que s'ha visitat aquesta pàgina.",
 
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 número 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.",
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 desprès de que el visitant faigi una cerca al vostre lloc web i haigi clicat en aquesta pàgina als resultats.",
 
78
  "ColumnVisitDuration": "Durada de la visita (en segons)",
79
  "ColumnVisitsWithConversions": "Visites amb conversions",
80
- "ConfigFileIsNotWritable": "El fitxer de configuració del Matomoi %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.",
81
- "Continue": "Continuar",
82
- "ContinueToPiwik": "Vés cap al Matomo",
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
83
  "CreatedByUser": "Creat per %s",
 
84
  "CurrentMonth": "Mes actual",
85
  "CurrentWeek": "Setmana actual",
86
  "CurrentYear": "Any actual",
87
- "Daily": "Diariament",
 
 
88
  "DailyReport": "diari",
89
  "DailyReports": "Informe diari",
90
- "DailySum": "suma diaria",
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
- "ExceptionDatabaseVersion": "La teva %1$s versió és %2$s però el Matomo necessita com a mínim %3$s",
 
 
 
 
 
 
 
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
- "ExceptionPrivilege": "No podeu accedir a aquest recurs perquè requereix un accés de %s",
 
 
 
 
 
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": "Què penseu del Matomo?",
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
- "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)",
 
 
 
 
 
 
 
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
- "ParameterMustIntegerBetween": "El paràmetre %1$s ha de ser un enter entre %2$s i %3$s",
 
 
255
  "Password": "Contrasenya",
256
  "Period": "Període",
257
  "Piechart": "Gràfic de sectors",
258
- "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)",
 
 
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 \"si\" si voleu o heu d'enviar el correu a través de un servidor enlloc de a través de la funció mail local.",
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
- "WarningFileIntegrityNoMd5file": "La verificació de la integritat dels fitxers no s'ha pogut completar perquè falta la funció md5_file();",
 
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
- "YourChangesHaveBeenSaved": "Els vostres canvis s'han guardat"
 
 
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 \/> Utilitzeu la tecla Shit per marcar la fila per a comparació sense obrir aquesta finestra emergent.",
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
- "GenerateVisits": "Si no disposeu d'informació d'avui podeu generar informació utilitzant l'extensió: %1$s. Heu d'activar l'extensió %2$s i desprès anar al menú 'Generador de visites' de l'espai d'administració del Matomo.",
 
 
 
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
- "LoadedAPIs": "S'ha carregat correctament un total de %s API",
443
- "MoreInformation": "Per mes informació sobre les APIs de Matomo, siusplau reviseu %1$s Introducció a l'API de Matomo %2$s i %3$s la Referència de l'API de Matomo %4$s.",
444
- "TopLinkTooltip": "Accediu a la vostra informació de l'anàlisis Web d'una forma programada a través d'una API simple en json, xml, etc.",
445
- "UserAuthentication": "Autentificació de l'usuari"
 
 
 
 
 
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 enllaç",
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
- "ColumnSearches": "Cerques",
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": "EL nombre de visites que han fet click en aquest enllaç. Si l'enllaç s'ha clicat més d'una vegada durant una visita només es conta un.",
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ç de sortida es un enllaç que porta el visitant fora del teu lloc web (a un altre domini)",
478
- "OutlinksReportDocumentation": "Aquest informe mostra una lista jeràrquica de les URL de sortida que han estat clicades pels vostres visitants.",
479
- "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.",
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
- "PluginDescription": "Informa sobre les vistes i títols de pàgina. Et permet mesurar el motor de cerca intern del teu lloc web. Monitoritza automàticament els clics en enllaços externs i descàrregues de fitxers.",
483
- "SiteSearchCategories1": "Aquest informe mostra les categoríes que han seleccionat els visitants quan han fet una cerca al vostre lloc web",
484
- "SiteSearchCategories2": "Per exemple, els llocs de Ecommers normalment tenen un selector de categoria que permet als visitants restringir les seves cerces als productes d'una Categoría concreta.",
 
 
 
 
 
 
 
 
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 teva audiència. Pot ajudar a trobar idees per a nou contingut, nous productes que els teus visitants poden estar buscar i permet millorar l'experiència dels visitants al vostre lloc web.",
487
- "SiteSearchKeyword": "Paraula clau (Cerca en lloc web)",
488
- "SiteSearchKeywordsDocumentation": "Aquest informe mostra les Paraules clau que els visitants han utiltizat per cercar al cercador del vostre lloc web.",
489
- "SiteSearchKeywordsNoResultDocumentation": "Aquest informe llista les paraules clau que no han tingut cap resultat. Potser es pot optimitzar l'algorisme de cerca o potser els vostres visitants estan cercant contingut que (encara) no existeix al vostre lloc web?",
 
 
 
 
 
 
 
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
- "WidgetPageTitles": "Títols de les pàgines",
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 Clau de cerca sense resultats",
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'anotació",
511
- "ClickToEdit": "Feu click per editar aquesta anotació",
512
- "ClickToEditOrAdd": "Feu click per editar o afegir una anotació",
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
- "Contents": "Continguts"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
- "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",
 
 
 
 
 
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
- "JavaScriptTracking": "Seguiment amb Javascript",
 
 
 
 
 
 
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
- "TrustedHostConfirm": "Esteu segur que voleu canviar el nom nom de la màquina (hostname) de confiança del Matomo?",
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
- "FlattenDataTable": "L'informe es jeràrquic %s Feu-lo pla.",
 
 
 
 
 
 
 
 
 
 
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": "S'ha de tenir el Javascript activat per vistualitzar la vista estàndar del Matomo.<br\/> No obstant això, sembla que el Javascript esta deshabilitat or no està suportat pel vostre navegador<br\/> Per utilitzar la vista estàndarc, activeu el Javascript canviant les opcions del navegador i %1$storneu-ho a probar%2$s.<br \/>",
 
 
 
 
 
 
 
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
- "SystemSummaryPhpVersion": "Versió del PHP"
588
  },
589
  "CorePluginsAdmin": {
590
- "Activate": "Activa",
591
- "Activated": "Actiu",
 
 
592
  "Active": "Actiu",
593
  "Activity": "Activitat",
594
- "AuthorHomepage": "Pàgina de l'autor",
595
- "Deactivate": "Desactiva",
 
 
 
 
 
 
 
 
 
 
 
 
 
 
596
  "Inactive": "Inactiu",
597
- "LicenseHomepage": "Pàgina de la llicència",
598
- "PluginsExtendPiwik": "Els connectors augmenten la funcionalitat del Matomo.",
599
- "OncePluginIsInstalledYouMayActivateHere": "Un cop hi ha un connector instal·lat, podeu activar-lo i desactivar-lo aquí.",
600
- "PluginHomepage": "Pàgina web",
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
601
  "PluginsManagement": "Gestiona els connectors",
602
  "Status": "Estat",
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
603
  "Version": "Versió",
604
- "Websites": "Llocs"
 
 
 
 
 
 
 
 
 
605
  },
606
  "CoreUpdater": {
607
- "CriticalErrorDuringTheUpgradeProcess": "Hi ha hagut un error crític durant el procés d'actualització:",
608
- "DatabaseUpgradeRequired": "És necessari actualitzar la base de dades",
609
- "DownloadingUpdateFromX": "S'està descarregant l'actualització de %s",
 
 
 
 
 
 
 
 
 
 
 
 
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 de l'actualització que han fallat",
615
- "ErrorDIYHelp_3": "actualitzeu la taula `option` de la base de dades del Matomo, introduint la versió que ha fallat a l'hora d'actualitzar a version_core",
616
- "ErrorDIYHelp_4": "torneu a engegar l'actualització (a través del navegador o la línia de comandes) per a continuar amb les actualitzacions restants.",
617
- "ErrorDIYHelp_5": "informeu sobre el problema (i la solució) per tal que puguem millorar el Matomo",
618
- "ErrorDuringPluginsUpdates": "Hi ha hagut errors en l'actualització dels connectors",
619
- "ExceptionAlreadyLatestVersion": "El Matomo està actualitzat a la versió %s.",
620
- "ExceptionArchiveEmpty": "Arxiu buit",
621
  "ExceptionArchiveIncompatible": "Arxiu incompatible: %s",
622
- "ExceptionArchiveIncomplete": "L'arxiu és incomplet: manquen alguns fitxers (per exemple, %s).",
623
- "HelpMessageContent": "Comproveu les %1$s PMF del Matomo (en anglès) %2$s, que intenten explicar els errors més comuns a l'actualització. %3$s Pregunteu a l'administrador del sistema, podria ajudar-vos amb l'error, que sembla estar relacionat amb el servidor o la instal·lació del MySQL.",
624
- "HelpMessageIntroductionWhenError": "El que hi ha a sobre és l'error del nucli. Hauria d'explicar la causa, però si necessiteu més ajuda, si us plau:",
 
 
 
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
- "MajorUpdateWarning1": "Es tracta una actualització major! Tardarà més de l'habitual",
628
- "MajorUpdateWarning2": "Aquest avís és extremadament important per instalacion amb gran quantitat d'informació.",
629
- "NoteForLargePiwikInstances": "Notes importants per instalacions del Matomo amb gran quanitat d'informació",
630
- "PiwikHasBeenSuccessfullyUpgraded": "El Matomo s'ha actualitzat amb èxit!",
 
 
 
 
 
 
 
 
 
 
 
 
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
- "TheFollowingPluginsWillBeUpgradedX": "Aquests connectors s'actualitzaran: %s.",
635
- "ThereIsNewVersionAvailableForUpdate": "Hi ha una nova versió del Matomo disponible.",
636
- "TheUpgradeProcessMayFailExecuteCommand": "Si teuniu una gran base de dades del Matomo, les actualitzacions poden tardar massa per executar-les des del navegador. En aquesta situació podeu executar les actualitzacions desde la línia de comandes: %s",
637
- "TheUpgradeProcessMayTakeAWhilePleaseBePatient": "El procés d'actualització pot durar una estona, tingueu paciència.",
638
- "UnpackingTheUpdate": "S'està desempacant l'actualització",
 
 
 
 
 
 
 
 
 
 
639
  "UpdateAutomatically": "Actualitza automàticament",
640
- "UpdateHasBeenCancelledExplanation": "L'actualització en un clic del Matomo ha estat cancel·lada. Si no podeu arreglar l'error de més amunt, us recomanem que actualitzeu el Matomo manualment. %1$s Si us plau, mireu-vos la %2$sDocumentació d'actualització (en anglès)%3$s per a començar!",
641
- "UpdateTitle": "Actualització del Matomo",
642
- "UpdateSuccessTitle": "El Matomo s'ha actualitzat amb èxit!",
643
- "UpgradeComplete": "S'ha actualitzat amb èxit!",
644
- "UpgradePiwik": "Actualitza el Matomo",
645
- "VerifyingUnpackedFiles": "S'estan verificant els fitxers",
646
- "WarningMessages": "Avisos:",
647
- "WeAutomaticallyDeactivatedTheFollowingPlugins": "S'han desactivat automàticament els connectors següents: %s",
648
- "YouCanUpgradeAutomaticallyOrDownloadPackage": "Podeu actualitzar a la versió %s automàticament o baixar-vos el paquet i instal·lar-lo manualment.",
649
- "YourDatabaseIsOutOfDate": "La base de dades del Matomo és antiga i cal actualitzar-la abans de continuar."
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
- "DashboardCopied": "S'ha copiat correctament el tauler a l'usuari seleccionat",
 
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 operació",
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": "Marca com a selecció de ginys per defecte.",
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": "Mostra la llista de connectors que suporten els navegadors dels visitants",
 
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
- "Software": "Software",
 
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
- "PortableMediaPlayer": "Reproductor de medis portàtils",
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
- "XVisitsFromDevices": "%1$s de visites provenen de %2$s dispositius",
 
755
  "WidgetBrowsers": "Navegadors",
756
- "WidgetBrowserVersionsDocumentation": "Aquest informe conté informació sobre quin tipus de navegador està utilitzant els vostres visitants. Cada versió del navegador es llista per separat."
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
- "MinValueDocumentation": "El valor mínim per aquest esdeveniment"
 
 
 
 
 
 
 
 
 
 
768
  },
769
  "Feedback": {
770
- "DoYouHaveBugReportOrFeatureRequest": "Teniu algun error que reportar o una petició de noves funcionalitats?",
 
 
 
 
 
 
 
 
 
 
771
  "IWantTo": "Jo vull:",
772
- "LearnWaysToParticipate": "Apren sobre les formes en que tu pots %1$s participar %2$s",
773
- "ManuallySendEmailTo": "Siusplau envia el vostre missatge manualmetn a",
774
- "SendFeedback": "Enviar Feedback",
775
- "ThankYou": "Gràcies per ajudar-nos a fer el Matomo millor!",
776
- "TopLinkTooltip": "Digue'ns que en penses o demana suport Professional.",
777
- "Forums": "Fòrums"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
778
  },
779
  "GeoIp2": {
780
- "AssumingNonApache": "No s'ha pogut trobar la funció apache_get_modules, s'asumeix que s'utilitza un servidor web diferent del Apache.",
781
- "CannotFindGeoIPServerVar": "La variable %s no està definida. Pot ser que el vostre servidor web no estigui configurat correctament.",
 
 
 
782
  "CannotListContent": "No s'ha pogut llistar el contingut de %1$s: %2$s",
 
 
 
783
  "DownloadingDb": "Descarregant %s",
784
- "DownloadNewDatabasesEvery": "Actualitza la base de dades cada",
785
- "FoundApacheModules": "El Matomo ha trobat els següents mòduls d'Apache",
786
- "GeoIPImplHasAccessTo": "Aquesta implementació de GeoIP té accés als següents tipus de bases de dades",
787
  "GeoIPDatabases": "Base de dades GeoIP",
788
- "GeoIPLocationProviderDesc_ServerBasedAnonWarn": "Nota: L'anonimització IP no té cap efecte amb les localitzacions reportades per aquest proveïdor. Abans d'utilitzar amb l'anonimització IP, assegureu-vos que no viola cap llei de privacitat a la que podeu estar subjectes.",
789
- "GeoIPNoServerVars": "El Matomo no ho pogut trobar cap variable GeoIP a %s",
790
- "GeoIPServerVarsFound": "El Matomo detecta les següents variables GeoIP a %s",
791
- "HowToSetupGeoIPIntro": "Sembla que no teniu configurada la Geolocalització. Es tracta d'una característica molt útil, i sense ella no podreu veure de forma acurada la localització completa dels vostres visitants. Tot seguit us expliquem com podeu començar a fer-la servir:",
792
- "HowToInstallApacheModule": "Com instal·lo el módul GeoIP per l'Apache?",
793
-
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 &amp;lt;títol&amp;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 &lt;\/head&gt; 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 -&gt; Security -&gt; 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 -&gt; Seguretat -&gt; 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 &gt; %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ó =&gt; 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",