PDF rausgenommen

This commit is contained in:
aschwarz
2023-01-23 11:03:31 +01:00
parent 82d562a322
commit a6523903eb
28078 changed files with 4247552 additions and 2 deletions

View File

@ -0,0 +1,358 @@
<?php
/**
* Piwik - free/libre analytics platform
*
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
namespace Piwik\Plugins\WebsiteMeasurable;
use Piwik\IP;
use Piwik\Measurable\Type\TypeManager;
use Piwik\Network\IPUtils;
use Piwik\Piwik;
use Piwik\Plugin;
use Piwik\Plugins\WebsiteMeasurable\Settings\Urls;
use Piwik\Settings\Setting;
use Piwik\Settings\FieldConfig;
use Piwik\Plugins\SitesManager;
use Exception;
/**
* Defines Settings for ExampleSettingsPlugin.
*
* Usage like this:
* $settings = new MeasurableSettings($idSite);
* $settings->autoRefresh->getValue();
* $settings->metric->getValue();
*/
class MeasurableSettings extends \Piwik\Settings\Measurable\MeasurableSettings
{
/** @var Setting */
public $urls;
/** @var Setting */
public $onlyTrackWhitelstedUrls;
/** @var Setting */
public $keepPageUrlFragments;
/** @var Setting */
public $excludeKnownUrls;
/** @var Setting */
public $excludedUserAgents;
/** @var Setting */
public $excludedIps;
/** @var Setting */
public $siteSearch;
/** @var Setting */
public $useDefaultSiteSearchParams;
/** @var Setting */
public $siteSearchKeywords;
/** @var Setting */
public $siteSearchCategory;
/** @var Setting */
public $excludedParameters;
/** @var Setting */
public $ecommerce;
/**
* @var SitesManager\API
*/
private $sitesManagerApi;
/**
* @var Plugin\Manager
*/
private $pluginManager;
/**
* @var TypeManager
*/
private $typeManager;
/**
* @var bool
*/
private $unsetSiteSearchKeywords = false;
public function __construct(SitesManager\API $api, Plugin\Manager $pluginManager, TypeManager $typeManager, $idSite, $idMeasurableType)
{
$this->sitesManagerApi = $api;
$this->pluginManager = $pluginManager;
$this->typeManager = $typeManager;
parent::__construct($idSite, $idMeasurableType);
}
protected function shouldShowSettingsForType($type)
{
$isWebsite = $type === Type::ID;
if ($isWebsite) {
return true;
}
// if no such type exists, we default to website properties
return !$this->typeManager->isExistingType($type);
}
protected function init()
{
if (!$this->shouldShowSettingsForType($this->idMeasurableType)) {
return;
}
$this->urls = new Urls($this->idSite);
$this->addSetting($this->urls);
$this->excludeKnownUrls = $this->makeExcludeUnknownUrls();
$this->keepPageUrlFragments = $this->makeKeepUrlFragments($this->sitesManagerApi);
$this->excludedIps = $this->makeExcludeIps();
$this->excludedParameters = $this->makeExcludedParameters();
$this->excludedUserAgents = $this->makeExcludedUserAgents();
/**
* SiteSearch
*/
$this->siteSearch = $this->makeSiteSearch();
$this->useDefaultSiteSearchParams = $this->makeUseDefaultSiteSearchParams($this->sitesManagerApi);
$this->siteSearchKeywords = $this->makeSiteSearchKeywords();
$siteSearchKeywords = $this->siteSearchKeywords->getValue();
$areSiteSearchKeywordsEmpty = empty($siteSearchKeywords) || (is_array($siteSearchKeywords) && implode("", $siteSearchKeywords) == "");
$this->useDefaultSiteSearchParams->setDefaultValue($areSiteSearchKeywordsEmpty);
$this->siteSearchCategory = $this->makeSiteSearchCategory($this->pluginManager);
/**
* SiteSearch End
*/
$this->ecommerce = $this->makeEcommerce();
}
private function makeExcludeUnknownUrls()
{
return $this->makeProperty('exclude_unknown_urls', $default = false, FieldConfig::TYPE_BOOL, function (FieldConfig $field) {
$field->title = Piwik::translate('SitesManager_OnlyMatchedUrlsAllowed');
$field->inlineHelp = Piwik::translate('SitesManager_OnlyMatchedUrlsAllowedHelp')
. '<br />'
. Piwik::translate('SitesManager_OnlyMatchedUrlsAllowedHelpExamples');
$field->uiControl = FieldConfig::UI_CONTROL_CHECKBOX;
});
}
private function makeKeepUrlFragments(SitesManager\API $sitesManagerApi)
{
return $this->makeProperty('keep_url_fragment', $default = '0', FieldConfig::TYPE_STRING, function (FieldConfig $field) use ($sitesManagerApi) {
$field->title = Piwik::translate('SitesManager_KeepURLFragmentsLong');
$field->uiControl = FieldConfig::UI_CONTROL_SINGLE_SELECT;
if ($sitesManagerApi->getKeepURLFragmentsGlobal()) {
$default = Piwik::translate('General_Yes');
} else {
$default = Piwik::translate('General_No');
}
$field->availableValues = array(
'0' => $default . ' (' . Piwik::translate('General_Default') . ')',
'1' => Piwik::translate('General_Yes'),
'2' => Piwik::translate('General_No')
);
});
}
private function makeExcludeIps()
{
return $this->makeProperty('excluded_ips', $default = array(), FieldConfig::TYPE_ARRAY, function (FieldConfig $field) {
$ip = IP::getIpFromHeader();
$field->title = Piwik::translate('SitesManager_ExcludedIps');
$field->inlineHelp = Piwik::translate('SitesManager_HelpExcludedIpAddresses', array('1.2.3.4/24', '1.2.3.*', '1.2.*.*'))
. '<br /><br />'
. Piwik::translate('SitesManager_YourCurrentIpAddressIs', array('<i>' . $ip . '</i>'));
$field->uiControl = FieldConfig::UI_CONTROL_TEXTAREA;
$field->uiControlAttributes = array(
'cols' => '20',
'rows' => '4',
'placeholder' => $ip,
);
$field->validate = function ($value) {
if (!empty($value)) {
$ips = array_map('trim', $value);
$ips = array_filter($ips, 'strlen');
foreach ($ips as $ip) {
if (IPUtils::getIPRangeBounds($ip) === null) {
throw new Exception(Piwik::translate('SitesManager_ExceptionInvalidIPFormat', array($ip, "1.2.3.4, 1.2.3.*, or 1.2.3.4/5")));
}
}
}
};
$field->transform = function ($value) {
if (empty($value)) {
return array();
}
$ips = array_map('trim', $value);
$ips = array_filter($ips, 'strlen');
return $ips;
};
});
}
private function makeExcludedParameters()
{
$self = $this;
return $this->makeProperty('excluded_parameters', $default = array(), FieldConfig::TYPE_ARRAY, function (FieldConfig $field) use ($self) {
$field->title = Piwik::translate('SitesManager_ExcludedParameters');
$field->inlineHelp = Piwik::translate('SitesManager_ListOfQueryParametersToExclude', "/^sess.*|.*[dD]ate$/")
. '<br /><br />'
. Piwik::translate('SitesManager_PiwikWillAutomaticallyExcludeCommonSessionParameters', array('phpsessid, sessionid, ...'));
$field->uiControl = FieldConfig::UI_CONTROL_TEXTAREA;
$field->uiControlAttributes = array('cols' => '20', 'rows' => '4');
$field->transform = function ($value) use ($self) {
return $self->checkAndReturnCommaSeparatedStringList($value);
};
});
}
private function makeExcludedUserAgents()
{
$self = $this;
return $this->makeProperty('excluded_user_agents', $default = array(), FieldConfig::TYPE_ARRAY, function (FieldConfig $field) use ($self) {
$field->title = Piwik::translate('SitesManager_ExcludedUserAgents');
$field->inlineHelp = Piwik::translate('SitesManager_GlobalExcludedUserAgentHelp1')
. '<br /><br />'
. Piwik::translate('SitesManager_GlobalListExcludedUserAgents_Desc')
. '<br />'
. Piwik::translate('SitesManager_GlobalExcludedUserAgentHelp2');
$field->uiControl = FieldConfig::UI_CONTROL_TEXTAREA;
$field->uiControlAttributes = array('cols' => '20', 'rows' => '4');
$field->transform = function ($value) use ($self) {
return $self->checkAndReturnCommaSeparatedStringList($value);
};
});
}
private function makeSiteSearch()
{
return $this->makeProperty('sitesearch', $default = 1, FieldConfig::TYPE_INT, function (FieldConfig $field) {
$field->title = Piwik::translate('Actions_SubmenuSitesearch');
$field->inlineHelp = Piwik::translate('SitesManager_SiteSearchUse');
$field->uiControl = FieldConfig::UI_CONTROL_SINGLE_SELECT;
$field->availableValues = array(
1 => Piwik::translate('SitesManager_EnableSiteSearch'),
0 => Piwik::translate('SitesManager_DisableSiteSearch')
);
});
}
private function makeUseDefaultSiteSearchParams(SitesManager\API $sitesManagerApi)
{
$settings = $this;
return $this->makeSetting('use_default_site_search_params', $default = true, FieldConfig::TYPE_BOOL, function (FieldConfig $field) use ($sitesManagerApi, $settings) {
if (Piwik::hasUserSuperUserAccess()) {
$title = Piwik::translate('SitesManager_SearchUseDefault', array("<a href='#globalSettings'>","</a>"));
} else {
$title = Piwik::translate('SitesManager_SearchUseDefault', array('', ''));
}
$field->title = $title;
$field->uiControl = FieldConfig::UI_CONTROL_CHECKBOX;
$searchKeywordsGlobal = $sitesManagerApi->getSearchKeywordParametersGlobal();
$hasParams = (int) !empty($searchKeywordsGlobal);
$field->condition = $hasParams . ' && sitesearch';
$searchKeywordsGlobal = $sitesManagerApi->getSearchKeywordParametersGlobal();
$searchCategoryGlobal = $sitesManagerApi->getSearchCategoryParametersGlobal();
$field->description = Piwik::translate('SitesManager_SearchKeywordLabel');
$field->description .= ' (' . Piwik::translate('General_Default') . ')';
$field->description .= ': ';
$field->description .= $searchKeywordsGlobal;
$field->description .= ' & ';
$field->description .= Piwik::translate('SitesManager_SearchCategoryLabel');
$field->description .= ': ';
$field->description .= $searchCategoryGlobal;
$field->transform = function ($value) use ($settings) {
if ($value) {
$settings->unsetSiteSearchKeywords = true;
}
return null; // never actually save a value for this
};
});
}
private function makeSiteSearchKeywords()
{
$settings = $this;
return $this->makeProperty('sitesearch_keyword_parameters', $default = array(), FieldConfig::TYPE_ARRAY, function (FieldConfig $field) use ($settings) {
$field->title = Piwik::translate('SitesManager_SearchKeywordLabel');
$field->uiControl = FieldConfig::UI_CONTROL_TEXT;
$field->inlineHelp = Piwik::translate('SitesManager_SearchKeywordParametersDesc');
$field->condition = 'sitesearch && !use_default_site_search_params';
$field->transform = function ($value) use ($settings) {
if ($settings->unsetSiteSearchKeywords) {
return '';
}
return $value;
};
});
}
private function makeSiteSearchCategory(Plugin\Manager $pluginManager)
{
return $this->makeProperty('sitesearch_category_parameters', $default = array(), FieldConfig::TYPE_ARRAY, function (FieldConfig $field) use ($pluginManager) {
$field->title = Piwik::translate('SitesManager_SearchCategoryLabel');
$field->uiControl = FieldConfig::UI_CONTROL_TEXT;
$field->inlineHelp = Piwik::translate('Goals_Optional')
. '<br /><br />'
. Piwik::translate('SitesManager_SearchCategoryParametersDesc');
$hasCustomVars = (int) $pluginManager->isPluginActivated('CustomVariables');
$field->condition = $hasCustomVars . ' && sitesearch && !use_default_site_search_params';
});
}
private function makeEcommerce()
{
return $this->makeProperty('ecommerce', $default = 0, FieldConfig::TYPE_INT, function (FieldConfig $field) {
$field->title = Piwik::translate('Goals_Ecommerce');
$field->inlineHelp = Piwik::translate('SitesManager_EcommerceHelp')
. '<br />'
. Piwik::translate('SitesManager_PiwikOffersEcommerceAnalytics',
array("<a href='https://matomo.org/docs/ecommerce-analytics/' target='_blank'>", '</a>'));
$field->uiControl = FieldConfig::UI_CONTROL_SINGLE_SELECT;
$field->availableValues = array(
0 => Piwik::translate('SitesManager_NotAnEcommerceSite'),
1 => Piwik::translate('SitesManager_EnableEcommerce')
);
});
}
public function checkAndReturnCommaSeparatedStringList($parameters)
{
if (empty($parameters)) {
return array();
}
$parameters = array_map('trim', $parameters);
$parameters = array_filter($parameters, 'strlen');
$parameters = array_unique($parameters);
return $parameters;
}
}

View File

@ -0,0 +1,145 @@
<?php
/**
* Piwik - free/libre analytics platform
*
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
namespace Piwik\Plugins\WebsiteMeasurable\Settings;
use Piwik\Common;
use Piwik\Piwik;
use Piwik\Plugin;
use Piwik\Settings\FieldConfig;
use Piwik\Plugins\SitesManager;
use Exception;
use Piwik\UrlHelper;
class Urls extends \Piwik\Settings\Measurable\MeasurableProperty
{
public function __construct($idSite)
{
$name = 'urls';
$pluginName = 'WebsiteMeasurable';
$defaultValue = array();
$type = FieldConfig::TYPE_ARRAY;
parent::__construct($name, $defaultValue, $type, $pluginName, $idSite);
}
public function configureField()
{
if ($this->config) {
return $this->config;
}
$config = new FieldConfig();
$config->title = Piwik::translate('SitesManager_Urls');
$config->inlineHelp = Piwik::translate('SitesManager_AliasUrlHelp');
$config->uiControl = FieldConfig::UI_CONTROL_TEXTAREA;
$config->uiControlAttributes = array(
'cols' => '25',
'rows' => '3',
'placeholder' => "http://example.com/\nhttps://www.example.org/",
);
$self = $this;
$config->validate = function ($urls) use ($self) {
$self->checkUrls($urls);
$self->checkAtLeastOneUrl($urls);
};
$config->transform = function ($urls) use ($self) {
return $this->cleanParameterUrls($urls);
};
$this->config = $config;
return $this->config;
}
/**
* Checks that the array has at least one element
*
* @param array $urls
* @throws Exception
*/
public function checkAtLeastOneUrl($urls)
{
$urls = $this->cleanParameterUrls($urls);
if (!is_array($urls)
|| count($urls) == 0
) {
throw new Exception(Piwik::translate('SitesManager_ExceptionNoUrl'));
}
}
/**
* Check that the array of URLs are valid URLs
*
* @param array $urls
* @throws Exception if any of the urls is not valid
*/
public function checkUrls($urls)
{
$urls = $this->cleanParameterUrls($urls);
foreach ($urls as $url) {
if (!UrlHelper::isLookLikeUrl($url)) {
throw new Exception(sprintf(Piwik::translate('SitesManager_ExceptionInvalidUrl'), $url));
}
}
}
/**
* Clean the parameter URLs:
* - if the parameter is a string make it an array
* - remove the trailing slashes if found
*
* @param string|array urls
* @return array the array of cleaned URLs
*/
public function cleanParameterUrls($urls)
{
if (!is_array($urls)) {
$urls = array($urls);
}
$urls = array_filter($urls);
$urls = array_map('urldecode', $urls);
foreach ($urls as &$url) {
$url = $this->removeTrailingSlash($url);
$scheme = parse_url($url, PHP_URL_SCHEME);
if (empty($scheme)
&& strpos($url, '://') === false
) {
$url = 'http://' . $url;
}
$url = trim($url);
$url = Common::sanitizeInputValue($url);
}
$urls = array_unique($urls);
return $urls;
}
/**
* Remove the final slash in the URLs if found
*
* @param string $url
* @return string the URL without the trailing slash
*/
private function removeTrailingSlash($url)
{
// if there is a final slash, we take the URL without this slash (expected URL format)
if (strlen($url) > 5
&& $url[strlen($url) - 1] == '/'
) {
$url = substr($url, 0, strlen($url) - 1);
}
return $url;
}
}

View File

@ -0,0 +1,20 @@
<?php
/**
* Piwik - free/libre analytics platform
*
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*
*/
namespace Piwik\Plugins\WebsiteMeasurable;
class Type extends \Piwik\Measurable\Type
{
const ID = 'website';
protected $name = 'Referrers_ColumnWebsite'; // we will use new key of WebsiteType_ once we have them
protected $namePlural = 'SitesManager_Sites'; // translated into more languages
protected $description = 'WebsiteMeasurable_WebsiteDescription';
protected $howToSetupUrl = '?module=CoreAdminHome&action=trackingCodeGenerator';
}

View File

@ -0,0 +1,13 @@
<?php
/**
* Piwik - free/libre analytics platform
*
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
namespace Piwik\Plugins\WebsiteMeasurable;
class WebsiteMeasurable extends \Piwik\Plugin
{
}

View File

@ -0,0 +1,6 @@
{
"WebsiteMeasurable": {
"Website": "ድር ጣቢያ",
"Websites": "ድር ጣቢያዎች"
}
}

View File

@ -0,0 +1,7 @@
{
"WebsiteMeasurable": {
"Website": "موقع وب",
"Websites": "مواقع وب",
"WebsiteDescription": "يتكون موقع الوب من صفحات وب ، يتم تقديم هذه الصفحات للخدمة عادة من نطاق وب واحد."
}
}

View File

@ -0,0 +1,6 @@
{
"WebsiteMeasurable": {
"Website": "Вэб-сайт",
"Websites": "Вэб-сайты"
}
}

View File

@ -0,0 +1,6 @@
{
"WebsiteMeasurable": {
"Website": "Сайт",
"Websites": "Сайтове"
}
}

View File

@ -0,0 +1,5 @@
{
"WebsiteMeasurable": {
"Website": "ওয়েবসাইট"
}
}

View File

@ -0,0 +1,5 @@
{
"WebsiteMeasurable": {
"Website": "Web stranica"
}
}

View File

@ -0,0 +1,6 @@
{
"WebsiteMeasurable": {
"Website": "Lloc web",
"Websites": "Llocs"
}
}

View File

@ -0,0 +1,7 @@
{
"WebsiteMeasurable": {
"Website": "Web",
"Websites": "Weby",
"WebsiteDescription": "Web se skládá ze stránek zpravidla umístěných na jedné doméně."
}
}

View File

@ -0,0 +1,6 @@
{
"WebsiteMeasurable": {
"Website": "Hjemmeside",
"Websites": "Hjemmesider"
}
}

View File

@ -0,0 +1,7 @@
{
"WebsiteMeasurable": {
"Website": "Website",
"Websites": "Websites",
"WebsiteDescription": "Eine Website besteht aus mehreren Webseiten die typischerweise von einer einzelnen Domain ausgeliefert werden."
}
}

View File

@ -0,0 +1,7 @@
{
"WebsiteMeasurable": {
"Website": "Ιστοτόπος",
"Websites": "Ιστοτόποι",
"WebsiteDescription": "Ένας ιστοτόπος αποτελείται από σελίδες που τυπικά εξυπηρετούνται από ένα όνομα ιστοχώρου."
}
}

View File

@ -0,0 +1,7 @@
{
"WebsiteMeasurable": {
"Website": "Website",
"Websites": "Websites",
"WebsiteDescription": "A website consists of web pages typically served from a single web domain."
}
}

View File

@ -0,0 +1,7 @@
{
"WebsiteMeasurable": {
"Website": "Sitio web",
"Websites": "Sitios web",
"WebsiteDescription": "Un sitio web consiste de páginas web típicamente ofrecidas desde un dominio único."
}
}

View File

@ -0,0 +1,7 @@
{
"WebsiteMeasurable": {
"Website": "Sitio de internet",
"Websites": "Sitios de internet",
"WebsiteDescription": "Un sitio de internet consiste de páginas usualmente hospedadas en un único dominio de internet."
}
}

View File

@ -0,0 +1,6 @@
{
"WebsiteMeasurable": {
"Website": "Veebileht",
"Websites": "Veebisaidid"
}
}

View File

@ -0,0 +1,6 @@
{
"WebsiteMeasurable": {
"Website": "Webgunea",
"Websites": "Webguneak"
}
}

View File

@ -0,0 +1,7 @@
{
"WebsiteMeasurable": {
"Website": "Verkkosivu",
"Websites": "Verkkosivut",
"WebsiteDescription": "Verkkosivusto on tyypillisesti kokoelma sivuja saman verkko-osoitteen alla."
}
}

View File

@ -0,0 +1,7 @@
{
"WebsiteMeasurable": {
"Website": "Site web",
"Websites": "Sites web",
"WebsiteDescription": "Un site web est constitué de pages web généralement servies à partir d'un nom de domaine unique."
}
}

View File

@ -0,0 +1,6 @@
{
"WebsiteMeasurable": {
"Website": "Web",
"Websites": "Sitios"
}
}

View File

@ -0,0 +1,6 @@
{
"WebsiteMeasurable": {
"Website": "אתר",
"Websites": "אתרים"
}
}

View File

@ -0,0 +1,7 @@
{
"WebsiteMeasurable": {
"Website": "वेबसाइट",
"Websites": "वेबसाइटें",
"WebsiteDescription": "एक वेबसाइट को आम तौर पर एक वेब डोमेन से सेवा की वेब पन्नों के होते हैं।"
}
}

View File

@ -0,0 +1,5 @@
{
"WebsiteMeasurable": {
"Website": "Web stranica"
}
}

View File

@ -0,0 +1,6 @@
{
"WebsiteMeasurable": {
"Website": "Weboldal",
"Websites": "Weboldalak"
}
}

View File

@ -0,0 +1,6 @@
{
"WebsiteMeasurable": {
"Website": "Website",
"Websites": "Websites"
}
}

View File

@ -0,0 +1,6 @@
{
"WebsiteMeasurable": {
"Website": "Vefur",
"Websites": "Vefir"
}
}

View File

@ -0,0 +1,7 @@
{
"WebsiteMeasurable": {
"Website": "Sito web",
"Websites": "Siti web",
"WebsiteDescription": "Un sito web consiste in pagine web provenienti, tipicamente, da un unico dominio."
}
}

View File

@ -0,0 +1,7 @@
{
"WebsiteMeasurable": {
"Website": "ウェブサイト",
"Websites": "ウェブサイト",
"WebsiteDescription": "Web サイトは、通常単一の web ドメインから提供される web ページで構成されています。"
}
}

View File

@ -0,0 +1,6 @@
{
"WebsiteMeasurable": {
"Website": "ვებ საიტი",
"Websites": "ვებ საიტები"
}
}

View File

@ -0,0 +1,7 @@
{
"WebsiteMeasurable": {
"Website": "웹사이트",
"Websites": "웹사이트",
"WebsiteDescription": "웹 페이지가 포함된 웹사이트는 대체로 하나의 웹 도메인에서 제공됩니다."
}
}

View File

@ -0,0 +1,5 @@
{
"WebsiteMeasurable": {
"Website": "Svetainė"
}
}

View File

@ -0,0 +1,7 @@
{
"WebsiteMeasurable": {
"Website": "Nettsted",
"Websites": "Nettsteder",
"WebsiteDescription": "Et nettsted består av nettsider som typisk vises fra ett enkelt domene."
}
}

View File

@ -0,0 +1,7 @@
{
"WebsiteMeasurable": {
"Website": "Website",
"Websites": "Websites",
"WebsiteDescription": "Een website bestaat normaal uit webpagina's die vanaf een enkel webdomein worden geserveerd."
}
}

View File

@ -0,0 +1,7 @@
{
"WebsiteMeasurable": {
"Website": "Portal",
"Websites": "Portale",
"WebsiteDescription": "Portal składa się ze stron internetowych przeważnie serwowanych w ramach pojedynczej domeny."
}
}

View File

@ -0,0 +1,7 @@
{
"WebsiteMeasurable": {
"Website": "Website",
"Websites": "Websites",
"WebsiteDescription": "Um site é composto de páginas normalmente funcionando a partir de um único domínio."
}
}

View File

@ -0,0 +1,7 @@
{
"WebsiteMeasurable": {
"Website": "Site",
"Websites": "Sites",
"WebsiteDescription": "Um site consiste em páginas web, tipicamente servidas a partir de um único domínio web."
}
}

View File

@ -0,0 +1,7 @@
{
"WebsiteMeasurable": {
"Website": "Веб-сайт",
"Websites": "Веб-сайты",
"WebsiteDescription": "Сайт состоит из веб-страниц и как правило, открывается с одного веб-домена."
}
}

View File

@ -0,0 +1,6 @@
{
"WebsiteMeasurable": {
"Website": "Web stránka",
"Websites": "Webstránky"
}
}

View File

@ -0,0 +1,7 @@
{
"WebsiteMeasurable": {
"Website": "Sajt",
"Websites": "Sajte",
"WebsiteDescription": "Një sajt përbëhet prej faqesh web që zakonisht shërbehen prej një përkatësie të caktuar web."
}
}

View File

@ -0,0 +1,7 @@
{
"WebsiteMeasurable": {
"Website": "Sajt",
"Websites": "Sajtovi",
"WebsiteDescription": "Sajt se sastoji od stranica koje se obično nalaze na jednom domenu."
}
}

View File

@ -0,0 +1,7 @@
{
"WebsiteMeasurable": {
"Website": "Webbplats",
"Websites": "Webbplatser",
"WebsiteDescription": "En webbplats består av webbsidor, vanligtvis från en enda domän."
}
}

View File

@ -0,0 +1,7 @@
{
"WebsiteMeasurable": {
"Website": "Web sitesi",
"Websites": "Web siteleri",
"WebsiteDescription": "Bir web sitesi genellikle tek bir etki alanı üzerinden web sayfalarını sunar."
}
}

View File

@ -0,0 +1,7 @@
{
"WebsiteMeasurable": {
"Website": "Сайт",
"Websites": "Сайти",
"WebsiteDescription": "Сайт складається з веб-сторінок, як правило, подається з одного домену."
}
}

View File

@ -0,0 +1,7 @@
{
"WebsiteMeasurable": {
"Website": "网站",
"Websites": "网站",
"WebsiteDescription": "网站是有独立域名的页面集合。"
}
}

View File

@ -0,0 +1,7 @@
{
"WebsiteMeasurable": {
"Website": "網站",
"Websites": "網站",
"WebsiteDescription": "由不同網頁所組成的網站通常來自單一網域。"
}
}

View File

@ -0,0 +1,4 @@
{
"name": "WebsiteMeasurable",
"description": "Analytics for the web: lets you measure and analyze Websites."
}