diff --git a/.github/workflows/phpstan.yaml b/.github/workflows/phpstan.yaml index 8d90800544..acd89a3dc6 100644 --- a/.github/workflows/phpstan.yaml +++ b/.github/workflows/phpstan.yaml @@ -18,7 +18,9 @@ jobs: php-version: 7.4 - name: Install Dependencies - run: composer update --ignore-platform-reqs + run: | + cp core/config/common.config.sample.php core/config/common.config.php + composer update --ignore-platform-reqs - name: Setup PHP 8.2 for PHPStan uses: shivammathur/setup-php@v2 diff --git a/composer.json b/composer.json index 25d7fc3830..3f1ca2f1a4 100644 --- a/composer.json +++ b/composer.json @@ -15,5 +15,18 @@ "platform": { "php": "7.4" } + }, + "autoload": { + "classmap": [ + "core/class/", + "core/com/", + "core/repo/" + ], + "files": [ + "core/config/common.config.php", + "core/config/compatibility.config.php", + "core/config/jeedom.config.php", + "core/php/utils.inc.php" + ] } } diff --git a/core/class/translate.class.php b/core/class/translate.class.php index 50aebb72ef..b84c1178b8 100644 --- a/core/class/translate.class.php +++ b/core/class/translate.class.php @@ -215,7 +215,3 @@ public static function setLanguage($_langage) { /* * *********************Methode d'instance************************* */ } - -function __($_content, $_name, $_backslash = false) { - return translate::sentence(str_replace("\'", "'", $_content), $_name, $_backslash); -} diff --git a/core/config/jeedom.config.php b/core/config/jeedom.config.php index 3699788726..99c6561d98 100644 --- a/core/config/jeedom.config.php +++ b/core/config/jeedom.config.php @@ -16,18 +16,53 @@ * along with Jeedom. If not, see . */ +/** @internal */ +final class Translation{ + + /** @var string */ + private $key; + + /** @var string */ + private $file; + + /** @var bool */ + private $backslash; + + /** @var string */ + private $prefix; + + /** @var string */ + private $suffix; + + public function __construct(string $key, string $file, bool $backslash, string $prefix, string $suffix) { + $this->key = $key; + $this->file = $file; + $this->backslash = $backslash; + $this->prefix = $prefix; + $this->suffix = $suffix; + } + + public function __toString(): string { + return $this->prefix.\translate::sentence(str_replace("\'", "'", $this->key), $this->file, $this->backslash).$this->suffix; + } +} + +function t(string $key, string $prefix = '', string $suffix = ''): Translation { + return new Translation($key, __FILE__, false, $prefix, $suffix); +} + global $JEEDOM_INTERNAL_CONFIG; $JEEDOM_INTERNAL_CONFIG = array( 'eqLogic' => array( 'category' => array( - 'heating' => array('name' => __('Chauffage', __FILE__), 'icon' => 'fas fa-fire'), - 'security' => array('name' => __('Sécurité', __FILE__), 'icon' => 'fas fa-lock'), - 'energy' => array('name' => __('Energie', __FILE__), 'icon' => 'fas fa-bolt'), - 'light' => array('name' => __('Lumière', __FILE__), 'icon' => 'far fa-lightbulb'), - 'opening' => array('name' => __('Ouvrant', __FILE__), 'icon' => 'fas fa-door-open'), - 'automatism' => array('name' => __('Automatisme', __FILE__), 'icon' => 'fas fa-magic'), - 'multimedia' => array('name' => __('Multimédia', __FILE__), 'icon' => 'fas fa-sliders-h'), - 'default' => array('name' => __('Autre', __FILE__), 'icon' => 'far fa-circle'), + 'heating' => array('name' => t('Chauffage'), 'icon' => 'fas fa-fire'), + 'security' => array('name' => t('Sécurité'), 'icon' => 'fas fa-lock'), + 'energy' => array('name' => t('Energie'), 'icon' => 'fas fa-bolt'), + 'light' => array('name' => t('Lumière'), 'icon' => 'far fa-lightbulb'), + 'opening' => array('name' => t('Ouvrant'), 'icon' => 'fas fa-door-open'), + 'automatism' => array('name' => t('Automatisme'), 'icon' => 'fas fa-magic'), + 'multimedia' => array('name' => t('Multimédia'), 'icon' => 'fas fa-sliders-h'), + 'default' => array('name' => t('Autre'), 'icon' => 'far fa-circle'), ), 'displayType' => array( 'dashboard' => array('name' => 'Dashboard'), @@ -44,34 +79,34 @@ ), 'plugin' => array( 'category' => array( - 'security' => array('name' => __('Sécurité', __FILE__), 'icon' => 'fas fa-lock'), - 'automation protocol' => array('name' => __('Protocole domotique', __FILE__), 'icon' => 'fas fa-rss'), - 'home automation protocol' => array('name' => __('Passerelle domotique', __FILE__), 'icon' => 'fas fa-asterisk'), - 'programming' => array('name' => __('Programmation', __FILE__), 'icon' => 'fas fa-code'), - 'organization' => array('name' => __('Organisation', __FILE__), 'icon' => 'far fa-calendar-alt', 'alias' => array('travel', 'finance')), - 'weather' => array('name' => __('Météo', __FILE__), 'icon' => 'far fa-sun'), - 'communication' => array('name' => __('Communication', __FILE__), 'icon' => 'fas fa-comment'), - 'devicecommunication' => array('name' => __('Objets connectés', __FILE__), 'icon' => 'fas fa-language'), - 'multimedia' => array('name' => __('Multimédia', __FILE__), 'icon' => 'fas fa-sliders-h'), - 'wellness' => array('name' => __('Confort', __FILE__), 'icon' => 'far fa-user'), - 'monitoring' => array('name' => __('Monitoring', __FILE__), 'icon' => 'fas fa-tachometer-alt'), - 'health' => array('name' => __('Santé', __FILE__), 'icon' => 'icon loisir-runner5'), - 'nature' => array('name' => __('Nature', __FILE__), 'icon' => 'icon nature-leaf32'), - 'automatisation' => array('name' => __('Automatisme', __FILE__), 'icon' => 'fas fa-magic'), - 'energy' => array('name' => __('Energie', __FILE__), 'icon' => 'fas fa-bolt'), - 'other' => array('name' => __('Autre', __FILE__), 'icon' => 'fas fa-bars'), + 'security' => array('name' => t('Sécurité'), 'icon' => 'fas fa-lock'), + 'automation protocol' => array('name' => t('Protocole domotique'), 'icon' => 'fas fa-rss'), + 'home automation protocol' => array('name' => t('Passerelle domotique'), 'icon' => 'fas fa-asterisk'), + 'programming' => array('name' => t('Programmation'), 'icon' => 'fas fa-code'), + 'organization' => array('name' => t('Organisation'), 'icon' => 'far fa-calendar-alt', 'alias' => array('travel', 'finance')), + 'weather' => array('name' => t('Météo'), 'icon' => 'far fa-sun'), + 'communication' => array('name' => t('Communication'), 'icon' => 'fas fa-comment'), + 'devicecommunication' => array('name' => t('Objets connectés'), 'icon' => 'fas fa-language'), + 'multimedia' => array('name' => t('Multimédia'), 'icon' => 'fas fa-sliders-h'), + 'wellness' => array('name' => t('Confort'), 'icon' => 'far fa-user'), + 'monitoring' => array('name' => t('Monitoring'), 'icon' => 'fas fa-tachometer-alt'), + 'health' => array('name' => t('Santé'), 'icon' => 'icon loisir-runner5'), + 'nature' => array('name' => t('Nature'), 'icon' => 'icon nature-leaf32'), + 'automatisation' => array('name' => t('Automatisme'), 'icon' => 'fas fa-magic'), + 'energy' => array('name' => t('Energie'), 'icon' => 'fas fa-bolt'), + 'other' => array('name' => t('Autre'), 'icon' => 'fas fa-bars'), ), ), 'messageChannel' => array( - 'alerting' => array('name' => __('Alerte des commandes', __FILE__), 'icon' => ''), - 'alertingReturnBack' => array('name' => __('Retour à l\'état normal des commandes', __FILE__), 'icon' => '') + 'alerting' => array('name' => t('Alerte des commandes'), 'icon' => ''), + 'alertingReturnBack' => array('name' => t('Retour à l\'état normal des commandes'), 'icon' => '') ), 'alerts' => array( - 'timeout' => array('name' => __('Timeout', __FILE__), 'icon' => 'far fa-clock', 'level' => 6, 'check' => false, 'color' => 'var(--al-danger-color)'), - 'batterywarning' => array('name' => __('Batterie en Warning', __FILE__), 'icon' => 'fas fa-battery-quarter', 'level' => 2, 'check' => false, 'color' => 'var(--al-warning-color)'), - 'batterydanger' => array('name' => __('Batterie en Danger', __FILE__), 'icon' => 'fas fa-battery-empty', 'level' => 3, 'check' => false, 'color' => 'var(--al-danger-color)'), - 'warning' => array('name' => __('Warning', __FILE__), 'icon' => 'fas fa-bell', 'level' => 4, 'check' => true, 'color' => 'var(--al-warning-color)'), - 'danger' => array('name' => __('Danger', __FILE__), 'icon' => 'fas fa-exclamation', 'level' => 5, 'check' => true, 'color' => 'var(--al-danger-color)'), + 'timeout' => array('name' => t('Timeout'), 'icon' => 'far fa-clock', 'level' => 6, 'check' => false, 'color' => 'var(--al-danger-color)'), + 'batterywarning' => array('name' => t('Batterie en Warning'), 'icon' => 'fas fa-battery-quarter', 'level' => 2, 'check' => false, 'color' => 'var(--al-warning-color)'), + 'batterydanger' => array('name' => t('Batterie en Danger'), 'icon' => 'fas fa-battery-empty', 'level' => 3, 'check' => false, 'color' => 'var(--al-danger-color)'), + 'warning' => array('name' => t('Warning'), 'icon' => 'fas fa-bell', 'level' => 4, 'check' => true, 'color' => 'var(--al-warning-color)'), + 'danger' => array('name' => t('Danger'), 'icon' => 'fas fa-exclamation', 'level' => 5, 'check' => true, 'color' => 'var(--al-danger-color)'), ), 'cmd' => array( 'widgets' => array( @@ -168,700 +203,700 @@ ), 'generic_type' => array( 'TOGGLE' => array( - 'name' => __('Toggle', __FILE__), 'familyid' => 'Other', 'family' => __('Autre', __FILE__), + 'name' => t('Toggle'), 'familyid' => 'Other', 'family' => t('Autre'), 'type' => 'Action', 'subtype' => array('other') ), 'ONLINE' => array( - 'name' => __('Connecté', __FILE__), 'familyid' => 'Other', 'family' => __('Autre', __FILE__), + 'name' => t('Connecté'), 'familyid' => 'Other', 'family' => t('Autre'), 'type' => 'Info', 'subtype' => array('binary') ), 'LIGHT_TOGGLE' => array( - 'name' => __('Lumière Toggle', __FILE__), 'familyid' => 'Light', 'family' => __('Lumière', __FILE__), + 'name' => t('Lumière Toggle'), 'familyid' => 'Light', 'family' => t('Lumière'), 'type' => 'Action', 'subtype' => array('other') ), 'LIGHT_STATE' => array( - 'name' => __('Lumière Etat', __FILE__), 'familyid' => 'Light', 'family' => __('Lumière', __FILE__), + 'name' => t('Lumière Etat'), 'familyid' => 'Light', 'family' => t('Lumière'), 'type' => 'Info', 'subtype' => array('binary', 'numeric') ), 'LIGHT_ON' => array( - 'name' => __('Lumière Bouton On', __FILE__), 'familyid' => 'Light', 'family' => __('Lumière', __FILE__), + 'name' => t('Lumière Bouton On'), 'familyid' => 'Light', 'family' => t('Lumière'), 'type' => 'Action', 'summary' => array('subtype' => 'other'), 'subtype' => array('other') ), 'LIGHT_OFF' => array( - 'name' => __('Lumière Bouton Off', __FILE__), 'familyid' => 'Light', 'family' => __('Lumière', __FILE__), + 'name' => t('Lumière Bouton Off'), 'familyid' => 'Light', 'family' => t('Lumière'), 'type' => 'Action', 'summary' => array('subtype' => 'other'), 'subtype' => array('other') ), 'LIGHT_SLIDER' => array( - 'name' => __('Lumière Slider', __FILE__), 'familyid' => 'Light', 'family' => __('Lumière', __FILE__), + 'name' => t('Lumière Slider'), 'familyid' => 'Light', 'family' => t('Lumière'), 'type' => 'Action', 'summary' => array('subtype' => 'slider'), 'subtype' => array('slider') ), 'LIGHT_BRIGHTNESS' => array( - 'name' => __('Lumière Luminosité', __FILE__), 'familyid' => 'Light', 'family' => __('Lumière', __FILE__), + 'name' => t('Lumière Luminosité'), 'familyid' => 'Light', 'family' => t('Lumière'), 'type' => 'Info', 'subtype' => array('numeric'), 'calcul' => 'avg' ), 'LIGHT_COLOR' => array( - 'name' => __('Lumière Couleur', __FILE__), 'familyid' => 'Light', 'family' => __('Lumière', __FILE__), + 'name' => t('Lumière Couleur'), 'familyid' => 'Light', 'family' => t('Lumière'), 'type' => 'Info', 'subtype' => array('string') ), 'LIGHT_SET_COLOR' => array( - 'name' => __('Lumière Couleur', __FILE__), 'familyid' => 'Light', 'family' => __('Lumière', __FILE__), + 'name' => t('Lumière Couleur'), 'familyid' => 'Light', 'family' => t('Lumière'), 'type' => 'Action', 'summary' => array('subtype' => 'color'), 'subtype' => array('color') ), 'LIGHT_MODE' => array( - 'name' => __('Lumière Mode', __FILE__), 'familyid' => 'Light', 'family' => __('Lumière', __FILE__), + 'name' => t('Lumière Mode'), 'familyid' => 'Light', 'family' => t('Lumière'), 'type' => 'Action', 'subtype' => array('other','select') ), 'LIGHT_STATE_BOOL' => array( - 'name' => __('Lumière Etat (Binaire)', __FILE__), 'familyid' => 'Light', 'family' => __('Lumière', __FILE__), + 'name' => t('Lumière Etat (Binaire)'), 'familyid' => 'Light', 'family' => t('Lumière'), 'type' => 'Info', 'subtype' => array('binary') ), 'LIGHT_COLOR_TEMP' => array( - 'name' => __('Lumière Température Couleur', __FILE__), 'familyid' => 'Light', 'family' => __('Lumière', __FILE__), + 'name' => t('Lumière Température Couleur'), 'familyid' => 'Light', 'family' => t('Lumière'), 'type' => 'Info', 'subtype' => array('numeric') ), 'LIGHT_SET_COLOR_TEMP' => array( - 'name' => __('Lumière Température Couleur', __FILE__), 'familyid' => 'Light', 'family' => __('Lumière', __FILE__), + 'name' => t('Lumière Température Couleur'), 'familyid' => 'Light', 'family' => t('Lumière'), 'type' => 'Action' ), 'ENERGY_STATE' => array( - 'name' => __('Prise Etat', __FILE__), 'familyid' => 'Outlet', 'family' => __('Prise', __FILE__), + 'name' => t('Prise Etat'), 'familyid' => 'Outlet', 'family' => t('Prise'), 'type' => 'Info', 'subtype' => array('numeric', 'binary') ), 'ENERGY_ON' => array( - 'name' => __('Prise Bouton On', __FILE__), 'familyid' => 'Outlet', 'family' => __('Prise', __FILE__), + 'name' => t('Prise Bouton On'), 'familyid' => 'Outlet', 'family' => t('Prise'), 'type' => 'Action', 'summary' => array('subtype' => 'other'), 'subtype' => array('other') ), 'ENERGY_OFF' => array( - 'name' => __('Prise Bouton Off', __FILE__), 'familyid' => 'Outlet', 'family' => __('Prise', __FILE__), + 'name' => t('Prise Bouton Off'), 'familyid' => 'Outlet', 'family' => t('Prise'), 'type' => 'Action', 'summary' => array('subtype' => 'other'), 'subtype' => array('other') ), 'ENERGY_SLIDER' => array( - 'name' => __('Prise Slider', __FILE__), 'familyid' => 'Outlet', 'family' => __('Prise', __FILE__), + 'name' => t('Prise Slider'), 'familyid' => 'Outlet', 'family' => t('Prise'), 'type' => 'Action', 'summary' => array('subtype' => 'slider') ), 'FLAP_STATE' => array( - 'name' => __('Volet Etat', __FILE__), 'familyid' => 'Shutter', 'family' => __('Volet', __FILE__), + 'name' => t('Volet Etat'), 'familyid' => 'Shutter', 'family' => t('Volet'), 'type' => 'Info', 'subtype' => array('binary', 'numeric') ), 'FLAP_UP' => array( - 'name' => __('Volet Bouton Monter', __FILE__), 'familyid' => 'Shutter', 'family' => __('Volet', __FILE__), + 'name' => t('Volet Bouton Monter'), 'familyid' => 'Shutter', 'family' => t('Volet'), 'type' => 'Action', 'summary' => array('subtype' => 'other'), 'subtype' => array('other') ), 'FLAP_DOWN' => array( - 'name' => __('Volet Bouton Descendre', __FILE__), 'familyid' => 'Shutter', 'family' => __('Volet', __FILE__), + 'name' => t('Volet Bouton Descendre'), 'familyid' => 'Shutter', 'family' => t('Volet'), 'type' => 'Action', 'summary' => array('subtype' => 'other'), 'subtype' => array('other') ), 'FLAP_STOP' => array( - 'name' => __('Volet Bouton Stop', __FILE__), 'familyid' => 'Shutter', 'family' => __('Volet', __FILE__), + 'name' => t('Volet Bouton Stop'), 'familyid' => 'Shutter', 'family' => t('Volet'), 'type' => 'Action' ), 'FLAP_SLIDER' => array( - 'name' => __('Volet Bouton Slider', __FILE__), 'familyid' => 'Shutter', 'family' => __('Volet', __FILE__), + 'name' => t('Volet Bouton Slider'), 'familyid' => 'Shutter', 'family' => t('Volet'), 'type' => 'Action', 'summary' => array('subtype' => 'slider'), 'subtype' => array('slider') ), 'FLAP_BSO_STATE' => array( - 'name' => __('Volet BSO Etat', __FILE__), 'familyid' => 'Shutter', 'family' => __('Volet', __FILE__), + 'name' => t('Volet BSO Etat'), 'familyid' => 'Shutter', 'family' => t('Volet'), 'type' => 'Info', 'subtype' => array('binary', 'numeric') ), 'FLAP_BSO_UP' => array( - 'name' => __('Volet BSO Bouton Monter', __FILE__), 'familyid' => 'Shutter', 'family' => __('Volet', __FILE__), + 'name' => t('Volet BSO Bouton Monter'), 'familyid' => 'Shutter', 'family' => t('Volet'), 'type' => 'Action', 'summary' => array('subtype' => 'other'), 'subtype' => array('other') ), 'FLAP_BSO_DOWN' => array( - 'name' => __('Volet BSO Bouton Descendre', __FILE__), 'familyid' => 'Shutter', 'family' => __('Volet', __FILE__), + 'name' => t('Volet BSO Bouton Descendre'), 'familyid' => 'Shutter', 'family' => t('Volet'), 'type' => 'Action', 'summary' => array('subtype' => 'other'), 'subtype' => array('other') ), 'HEATING_ON' => array( - 'name' => __('Chauffage fil pilote Bouton ON', __FILE__), 'familyid' => 'Heating', 'family' => __('Chauffage', __FILE__), + 'name' => t('Chauffage fil pilote Bouton ON'), 'familyid' => 'Heating', 'family' => t('Chauffage'), 'type' => 'Action', 'summary' => array('subtype' => 'other'), 'subtype' => array('other') ), 'HEATING_OFF' => array( - 'name' => __('Chauffage fil pilote Bouton OFF', __FILE__), 'familyid' => 'Heating', 'family' => __('Chauffage', __FILE__), + 'name' => t('Chauffage fil pilote Bouton OFF'), 'familyid' => 'Heating', 'family' => t('Chauffage'), 'type' => 'Action', 'summary' => array('subtype' => 'other'), 'subtype' => array('other') ), 'HEATING_STATE' => array( - 'name' => __('Chauffage fil pilote Etat', __FILE__), 'familyid' => 'Heating', 'family' => __('Chauffage', __FILE__), + 'name' => t('Chauffage fil pilote Etat'), 'familyid' => 'Heating', 'family' => t('Chauffage'), 'type' => 'Info', 'subtype' => array('binary', 'numeric') ), 'HEATING_OTHER' => array( - 'name' => __('Chauffage fil pilote Bouton', __FILE__), 'familyid' => 'Heating', 'family' => __('Chauffage', __FILE__), + 'name' => t('Chauffage fil pilote Bouton'), 'familyid' => 'Heating', 'family' => t('Chauffage'), 'type' => 'Action', 'subtype' => array('other') ), 'LOCK_STATE' => array( - 'name' => __('Serrure Etat', __FILE__), 'familyid' => 'Opening', 'family' => __('Ouvrant', __FILE__), + 'name' => t('Serrure Etat'), 'familyid' => 'Opening', 'family' => t('Ouvrant'), 'type' => 'Info', 'subtype' => array('binary') ), 'LOCK_OPEN' => array( - 'name' => __('Serrure Bouton Ouvrir', __FILE__), 'familyid' => 'Opening', 'family' => __('Ouvrant', __FILE__), + 'name' => t('Serrure Bouton Ouvrir'), 'familyid' => 'Opening', 'family' => t('Ouvrant'), 'type' => 'Action', 'summary' => array('subtype' => 'other'), 'subtype' => array('other') ), 'LOCK_CLOSE' => array( - 'name' => __('Serrure Bouton Fermer', __FILE__), 'familyid' => 'Opening', 'family' => __('Ouvrant', __FILE__), + 'name' => t('Serrure Bouton Fermer'), 'familyid' => 'Opening', 'family' => t('Ouvrant'), 'type' => 'Action', 'summary' => array('subtype' => 'other'), 'subtype' => array('other') ), 'GB_OPEN' => array( - 'name' => __('Portail ou garage bouton d\'ouverture', __FILE__), 'familyid' => 'Opening', 'family' => __('Ouvrant', __FILE__), + 'name' => t('Portail ou garage bouton d\'ouverture'), 'familyid' => 'Opening', 'family' => t('Ouvrant'), 'type' => 'Action', 'summary' => array('subtype' => 'other'), 'subtype' => array('other') ), 'GB_CLOSE' => array( - 'name' => __('Portail ou garage bouton de fermeture', __FILE__), 'familyid' => 'Opening', 'family' => __('Ouvrant', __FILE__), + 'name' => t('Portail ou garage bouton de fermeture'), 'familyid' => 'Opening', 'family' => t('Ouvrant'), 'type' => 'Action', 'summary' => array('subtype' => 'other'), 'subtype' => array('other') ), 'GB_TOGGLE' => array( - 'name' => __('Portail ou garage bouton toggle', __FILE__), 'familyid' => 'Opening', 'family' => __('Ouvrant', __FILE__), + 'name' => t('Portail ou garage bouton toggle'), 'familyid' => 'Opening', 'family' => t('Ouvrant'), 'type' => 'Action', 'subtype' => array('other') ), 'BARRIER_STATE' => array( - 'name' => __('Portail (ouvrant) Etat', __FILE__), 'familyid' => 'Opening', 'family' => __('Ouvrant', __FILE__), + 'name' => t('Portail (ouvrant) Etat'), 'familyid' => 'Opening', 'family' => t('Ouvrant'), 'type' => 'Info', 'subtype' => array('binary') ), 'GARAGE_STATE' => array( - 'name' => __('Garage (ouvrant) Etat', __FILE__), 'familyid' => 'Opening', 'family' => __('Ouvrant', __FILE__), + 'name' => t('Garage (ouvrant) Etat'), 'familyid' => 'Opening', 'family' => t('Ouvrant'), 'type' => 'Info', 'subtype' => array('binary') ), 'OPENING' => array( - 'name' => __('Porte', __FILE__), 'familyid' => 'Opening', 'family' => __('Ouvrant', __FILE__), + 'name' => t('Porte'), 'familyid' => 'Opening', 'family' => t('Ouvrant'), 'type' => 'Info', 'subtype' => array('binary') ), 'OPENING_WINDOW' => array( - 'name' => __('Fenêtre', __FILE__), 'familyid' => 'Opening', 'family' => __('Ouvrant', __FILE__), + 'name' => t('Fenêtre'), 'familyid' => 'Opening', 'family' => t('Ouvrant'), 'type' => 'Info', 'subtype' => array('binary') ), 'THERMOSTAT_STATE' => array( - 'name' => __('Thermostat Etat', __FILE__), 'familyid' => 'Thermostat', 'family' => __('Thermostat', __FILE__), + 'name' => t('Thermostat Etat'), 'familyid' => 'Thermostat', 'family' => t('Thermostat'), 'type' => 'Info', 'subtype' => array('binary') ), 'THERMOSTAT_TEMPERATURE' => array( - 'name' => __('Thermostat Température ambiante', __FILE__), 'familyid' => 'Thermostat', 'family' => __('Thermostat', __FILE__), + 'name' => t('Thermostat Température ambiante'), 'familyid' => 'Thermostat', 'family' => t('Thermostat'), 'type' => 'Info', 'subtype' => array('numeric'), 'calcul' => 'avg' ), 'THERMOSTAT_SET_SETPOINT' => array( - 'name' => __('Thermostat consigne', __FILE__), 'familyid' => 'Thermostat', 'family' => __('Thermostat', __FILE__), + 'name' => t('Thermostat consigne'), 'familyid' => 'Thermostat', 'family' => t('Thermostat'), 'type' => 'Action', 'subtype' => array('slider') ), 'THERMOSTAT_SETPOINT' => array( - 'name' => __('Thermostat consigne', __FILE__), 'familyid' => 'Thermostat', 'family' => __('Thermostat', __FILE__), + 'name' => t('Thermostat consigne'), 'familyid' => 'Thermostat', 'family' => t('Thermostat'), 'type' => 'Info', 'subtype' => array('numeric'), 'calcul' => 'avg' ), 'THERMOSTAT_SET_MODE' => array( - 'name' => __('Thermostat Mode', __FILE__), 'familyid' => 'Thermostat', 'family' => __('Thermostat', __FILE__), + 'name' => t('Thermostat Mode'), 'familyid' => 'Thermostat', 'family' => t('Thermostat'), 'type' => 'Action', 'subtype' => array('other','select') ), 'THERMOSTAT_MODE' => array( - 'name' => __('Thermostat Mode', __FILE__), 'familyid' => 'Thermostat', 'family' => __('Thermostat', __FILE__), + 'name' => t('Thermostat Mode'), 'familyid' => 'Thermostat', 'family' => t('Thermostat'), 'type' => 'Info', 'subtype' => array('string') ), 'THERMOSTAT_SET_LOCK' => array( - 'name' => __('Thermostat Verrouillage', __FILE__), 'familyid' => 'Thermostat', 'family' => __('Thermostat', __FILE__), + 'name' => t('Thermostat Verrouillage'), 'familyid' => 'Thermostat', 'family' => t('Thermostat'), 'type' => 'Action', 'subtype' => array('other') ), 'THERMOSTAT_SET_UNLOCK' => array( - 'name' => __('Thermostat Déverrouillage', __FILE__), 'familyid' => 'Thermostat', 'family' => __('Thermostat', __FILE__), + 'name' => t('Thermostat Déverrouillage'), 'familyid' => 'Thermostat', 'family' => t('Thermostat'), 'type' => 'Action', 'subtype' => array('other') ), 'THERMOSTAT_LOCK' => array( - 'name' => __('Thermostat Verrouillage', __FILE__), 'familyid' => 'Thermostat', 'family' => __('Thermostat', __FILE__), + 'name' => t('Thermostat Verrouillage'), 'familyid' => 'Thermostat', 'family' => t('Thermostat'), 'type' => 'Info', 'subtype' => array('binary') ), 'THERMOSTAT_TEMPERATURE_OUTDOOR' => array( - 'name' => __('Thermostat Température Exterieur', __FILE__), 'familyid' => 'Thermostat', 'family' => __('Thermostat', __FILE__), + 'name' => t('Thermostat Température Exterieur'), 'familyid' => 'Thermostat', 'family' => t('Thermostat'), 'type' => 'Info', 'subtype' => array('numeric'), 'calcul' => 'avg' ), 'THERMOSTAT_STATE_NAME' => array( - 'name' => __('Thermostat Etat (HUMAIN)', __FILE__), 'familyid' => 'Thermostat', 'family' => __('Thermostat', __FILE__), + 'name' => t('Thermostat Etat (HUMAIN)'), 'familyid' => 'Thermostat', 'family' => t('Thermostat'), 'type' => 'Info', 'subtype' => array('string') ), 'THERMOSTAT_HUMIDITY' => array( - 'name' => __('Thermostat humidité ambiante', __FILE__), 'familyid' => 'Thermostat', 'family' => __('Thermostat', __FILE__), + 'name' => t('Thermostat humidité ambiante'), 'familyid' => 'Thermostat', 'family' => t('Thermostat'), 'type' => 'Info', 'subtype' => array('numeric'), 'calcul' => 'avg' ), 'THERMOSTAT_SET_MAX_TEMP' => array( - 'name' => __('Thermostat maximum consigne', __FILE__), 'familyid' => 'Thermostat', 'family' => __('Thermostat', __FILE__), + 'name' => t('Thermostat maximum consigne'), 'familyid' => 'Thermostat', 'family' => t('Thermostat'), 'type' => 'Action', 'subtype' => array('slider') ), 'THERMOSTAT_SET_MIN_TEMP' => array( - 'name' => __('Thermostat minimum consigne', __FILE__), 'familyid' => 'Thermostat', 'family' => __('Thermostat', __FILE__), + 'name' => t('Thermostat minimum consigne'), 'familyid' => 'Thermostat', 'family' => t('Thermostat'), 'type' => 'Action', 'subtype' => array('slider') ), 'THERMOSTAT_HUMIDITY' => array( - 'name' => __('Thermostat humidité ambiante', __FILE__), 'familyid' => 'Thermostat', 'family' => __('Thermostat', __FILE__), + 'name' => t('Thermostat humidité ambiante'), 'familyid' => 'Thermostat', 'family' => t('Thermostat'), 'type' => 'Info', 'subtype' => array('numeric'), 'calcul' => 'avg' ), 'HUMIDITY_SETPOINT' => array( - 'name' => __('Humidité consigne', __FILE__), 'familyid' => 'Thermostat', 'family' => __('Thermostat', __FILE__), + 'name' => t('Humidité consigne'), 'familyid' => 'Thermostat', 'family' => t('Thermostat'), 'type' => 'Info', 'subtype' => array('slider') ), 'HUMIDITY_SET_SETPOINT' => array( - 'name' => __('Humidité consigne', __FILE__), 'familyid' => 'Thermostat', 'family' => __('Thermostat', __FILE__), + 'name' => t('Humidité consigne'), 'familyid' => 'Thermostat', 'family' => t('Thermostat'), 'type' => 'Action', 'subtype' => array('slider') ), 'CAMERA_UP' => array( - 'name' => __('Mouvement caméra vers le haut', __FILE__), 'familyid' => 'Camera', 'family' => __('Caméra', __FILE__), + 'name' => t('Mouvement caméra vers le haut'), 'familyid' => 'Camera', 'family' => t('Caméra'), 'type' => 'Action', 'subtype' => array('other') ), 'CAMERA_DOWN' => array( - 'name' => __('Mouvement caméra vers le bas', __FILE__), 'familyid' => 'Camera', 'family' => __('Caméra', __FILE__), + 'name' => t('Mouvement caméra vers le bas'), 'familyid' => 'Camera', 'family' => t('Caméra'), 'type' => 'Action', 'subtype' => array('other') ), 'CAMERA_LEFT' => array( - 'name' => __('Mouvement caméra vers la gauche', __FILE__), 'familyid' => 'Camera', 'family' => __('Caméra', __FILE__), + 'name' => t('Mouvement caméra vers la gauche'), 'familyid' => 'Camera', 'family' => t('Caméra'), 'type' => 'Action', 'subtype' => array('other') ), 'CAMERA_RIGHT' => array( - 'name' => __('Mouvement caméra vers la droite', __FILE__), 'familyid' => 'Camera', 'family' => __('Caméra', __FILE__), + 'name' => t('Mouvement caméra vers la droite'), 'familyid' => 'Camera', 'family' => t('Caméra'), 'type' => 'Action', 'subtype' => array('other') ), 'CAMERA_ZOOM' => array( - 'name' => __('Zoom caméra vers l\'avant', __FILE__), 'familyid' => 'Camera', 'family' => __('Caméra', __FILE__), + 'name' => t('Zoom caméra vers l\'avant'), 'familyid' => 'Camera', 'family' => t('Caméra'), 'type' => 'Action', 'subtype' => array('other') ), 'CAMERA_DEZOOM' => array( - 'name' => __('Zoom caméra vers l\'arrière', __FILE__), 'familyid' => 'Camera', 'family' => __('Caméra', __FILE__), + 'name' => t('Zoom caméra vers l\'arrière'), 'familyid' => 'Camera', 'family' => t('Caméra'), 'type' => 'Action', 'subtype' => array('other') ), 'CAMERA_STOP' => array( - 'name' => __('Stop caméra', __FILE__), 'familyid' => 'Camera', 'family' => __('Caméra', __FILE__), + 'name' => t('Stop caméra'), 'familyid' => 'Camera', 'family' => t('Caméra'), 'type' => 'Action', 'subtype' => array('other') ), 'CAMERA_PRESET' => array( - 'name' => __('Preset caméra', __FILE__), 'familyid' => 'Camera', 'family' => __('Caméra', __FILE__), + 'name' => t('Preset caméra'), 'familyid' => 'Camera', 'family' => t('Caméra'), 'type' => 'Action', 'subtype' => array('other') ), 'CAMERA_URL' => array( - 'name' => __('URL caméra', __FILE__), 'familyid' => 'Camera', 'family' => __('Caméra', __FILE__), + 'name' => t('URL caméra'), 'familyid' => 'Camera', 'family' => t('Caméra'), 'type' => 'Info', 'subtype' => array('string') ), 'CAMERA_RECORD_STATE' => array( - 'name' => __('État enregistrement caméra', __FILE__), 'familyid' => 'Camera', 'family' => __('Caméra', __FILE__), + 'name' => t('État enregistrement caméra'), 'familyid' => 'Camera', 'family' => t('Caméra'), 'type' => 'Info', 'subtype' => array('binary') ), 'CAMERA_RECORD' => array( - 'name' => __('Enregistrement caméra', __FILE__), 'familyid' => 'Camera', 'family' => __('Caméra', __FILE__), + 'name' => t('Enregistrement caméra'), 'familyid' => 'Camera', 'family' => t('Caméra'), 'type' => 'Action' ), 'CAMERA_TAKE' => array( - 'name' => __('Snapshot caméra', __FILE__), 'familyid' => 'Camera', 'family' => __('Caméra', __FILE__), + 'name' => t('Snapshot caméra'), 'familyid' => 'Camera', 'family' => t('Caméra'), 'type' => 'Action' ), 'MODE_STATE' => array( - 'name' => __('Mode Etat', __FILE__), 'familyid' => 'Mode', 'family' => __('Mode', __FILE__), + 'name' => t('Mode Etat'), 'familyid' => 'Mode', 'family' => t('Mode'), 'type' => 'Info', 'subtype' => array('string') ), 'MODE_SET_STATE' => array( - 'name' => __('Changer Mode', __FILE__), 'familyid' => 'Mode', 'family' => __('Mode', __FILE__), + 'name' => t('Changer Mode'), 'familyid' => 'Mode', 'family' => t('Mode'), 'type' => 'Action', 'subtype' => array('other','select') ), 'SIREN_STATE' => array( - 'name' => __('Sirène Etat', __FILE__), 'familyid' => 'Security', 'family' => __('Sécurité', __FILE__), + 'name' => t('Sirène Etat'), 'familyid' => 'Security', 'family' => t('Sécurité'), 'type' => 'Info', 'subtype' => array('binary') ), 'SIREN_OFF' => array( - 'name' => __('Sirène Bouton Off', __FILE__), 'familyid' => 'Security', 'family' => __('Sécurité', __FILE__), + 'name' => t('Sirène Bouton Off'), 'familyid' => 'Security', 'family' => t('Sécurité'), 'type' => 'Action', 'summary' => array('subtype' => 'other'), 'subtype' => array('other') ), 'SIREN_ON' => array( - 'name' => __('Sirène Bouton On', __FILE__), 'familyid' => 'Security', 'family' => __('Sécurité', __FILE__), + 'name' => t('Sirène Bouton On'), 'familyid' => 'Security', 'family' => t('Sécurité'), 'type' => 'Action', 'summary' => array('subtype' => 'other'), 'subtype' => array('other') ), 'ALARM_STATE' => array( - 'name' => __('Alarme Etat', __FILE__), 'familyid' => 'Security', 'family' => __('Sécurité', __FILE__), + 'name' => t('Alarme Etat'), 'familyid' => 'Security', 'family' => t('Sécurité'), 'type' => 'Info', 'subtype' => array('binary', 'string') ), 'ALARM_MODE' => array( - 'name' => __('Alarme mode', __FILE__), 'familyid' => 'Security', 'family' => __('Sécurité', __FILE__), + 'name' => t('Alarme mode'), 'familyid' => 'Security', 'family' => t('Sécurité'), 'type' => 'Info', 'subtype' => array('string') ), 'ALARM_ENABLE_STATE' => array( - 'name' => __('Alarme Etat activée', __FILE__), 'familyid' => 'Security', 'family' => __('Sécurité', __FILE__), + 'name' => t('Alarme Etat activée'), 'familyid' => 'Security', 'family' => t('Sécurité'), 'type' => 'Info', 'subtype' => array('binary') ), 'ALARM_ARMED' => array( - 'name' => __('Alarme armée', __FILE__), 'familyid' => 'Security', 'family' => __('Sécurité', __FILE__), + 'name' => t('Alarme armée'), 'familyid' => 'Security', 'family' => t('Sécurité'), 'type' => 'Action', 'subtype' => array('other') ), 'ALARM_RELEASED' => array( - 'name' => __('Alarme libérée', __FILE__), 'familyid' => 'Security', 'family' => __('Sécurité', __FILE__), + 'name' => t('Alarme libérée'), 'familyid' => 'Security', 'family' => t('Sécurité'), 'type' => 'Action', 'subtype' => array('other') ), 'ALARM_SET_MODE' => array( - 'name' => __('Alarme Mode', __FILE__), 'familyid' => 'Security', 'family' => __('Sécurité', __FILE__), + 'name' => t('Alarme Mode'), 'familyid' => 'Security', 'family' => t('Sécurité'), 'type' => 'Action', 'subtype' => array('other','select') ), 'FLOOD' => array( - 'name' => __('Inondation', __FILE__), 'familyid' => 'Security', 'family' => __('Sécurité', __FILE__), + 'name' => t('Inondation'), 'familyid' => 'Security', 'family' => t('Sécurité'), 'type' => 'Info', 'subtype' => array('binary') ), 'SABOTAGE' => array( - 'name' => __('Sabotage', __FILE__), 'familyid' => 'Security', 'family' => __('Sécurité', __FILE__), + 'name' => t('Sabotage'), 'familyid' => 'Security', 'family' => t('Sécurité'), 'type' => 'Info', 'subtype' => array('binary') ), 'SHOCK' => array( - 'name' => __('Choc', __FILE__), 'familyid' => 'Security', 'family' => __('Sécurité', __FILE__), + 'name' => t('Choc'), 'familyid' => 'Security', 'family' => t('Sécurité'), 'type' => 'Info', 'subtype' => array('binary', 'numeric') ), 'WEATHER_TEMPERATURE' => array( - 'name' => __('Météo Température', __FILE__), 'familyid' => 'Weather', 'family' => __('Météo', __FILE__), + 'name' => t('Météo Température'), 'familyid' => 'Weather', 'family' => t('Météo'), 'type' => 'Info', 'subtype' => array('numeric'), 'calcul' => 'avg' ), 'WEATHER_HUMIDITY' => array( - 'name' => __('Météo Humidité', __FILE__), 'familyid' => 'Weather', 'family' => __('Météo', __FILE__), + 'name' => t('Météo Humidité'), 'familyid' => 'Weather', 'family' => t('Météo'), 'type' => 'Info', 'subtype' => array('numeric'), 'calcul' => 'avg' ), 'WEATHER_PRESSURE' => array( - 'name' => __('Météo Pression', __FILE__), 'familyid' => 'Weather', 'family' => __('Météo', __FILE__), + 'name' => t('Météo Pression'), 'familyid' => 'Weather', 'family' => t('Météo'), 'type' => 'Info', 'subtype' => array('numeric'), 'calcul' => 'avg' ), 'WEATHER_WIND_SPEED' => array( - 'name' => __('Météo vitesse du vent', __FILE__), 'familyid' => 'Weather', 'family' => __('Météo', __FILE__), + 'name' => t('Météo vitesse du vent'), 'familyid' => 'Weather', 'family' => t('Météo'), 'type' => 'Info', 'subtype' => array('numeric'), 'calcul' => 'avg' ), 'WEATHER_WIND_DIRECTION' => array( - 'name' => __('Météo direction du vent', __FILE__), 'familyid' => 'Weather', 'family' => __('Météo', __FILE__), + 'name' => t('Météo direction du vent'), 'familyid' => 'Weather', 'family' => t('Météo'), 'type' => 'Info', 'subtype' => array('numeric'), 'calcul' => 'avg' ), 'WEATHER_SUNSET' => array( - 'name' => __('Météo coucher de soleil', __FILE__), 'familyid' => 'Weather', 'family' => __('Météo', __FILE__), + 'name' => t('Météo coucher de soleil'), 'familyid' => 'Weather', 'family' => t('Météo'), 'type' => 'Info', 'subtype' => array('numeric'), 'calcul' => 'avg' ), 'WEATHER_SUNRISE' => array( - 'name' => __('Météo lever de soleil', __FILE__), 'familyid' => 'Weather', 'family' => __('Météo', __FILE__), + 'name' => t('Météo lever de soleil'), 'familyid' => 'Weather', 'family' => t('Météo'), 'type' => 'Info', 'subtype' => array('numeric'), 'calcul' => 'avg' ), 'WEATHER_TEMPERATURE_MIN' => array( - 'name' => __('Météo Température min', __FILE__), 'familyid' => 'Weather', 'family' => __('Météo', __FILE__), + 'name' => t('Météo Température min'), 'familyid' => 'Weather', 'family' => t('Météo'), 'type' => 'Info', 'subtype' => array('numeric'), 'calcul' => 'avg' ), 'WEATHER_TEMPERATURE_MAX' => array( - 'name' => __('Météo Température max', __FILE__), 'familyid' => 'Weather', 'family' => __('Météo', __FILE__), + 'name' => t('Météo Température max'), 'familyid' => 'Weather', 'family' => t('Météo'), 'type' => 'Info', 'subtype' => array('numeric'), 'calcul' => 'avg' ), 'WEATHER_CONDITION' => array( - 'name' => __('Météo condition', __FILE__), 'familyid' => 'Weather', 'family' => __('Météo', __FILE__), + 'name' => t('Météo condition'), 'familyid' => 'Weather', 'family' => t('Météo'), 'type' => 'Info', 'subtype' => array('string') ), 'WEATHER_CONDITION_ID' => array( - 'name' => __('Météo condition (id)', __FILE__), 'familyid' => 'Weather', 'family' => __('Météo', __FILE__), + 'name' => t('Météo condition (id)'), 'familyid' => 'Weather', 'family' => t('Météo'), 'type' => 'Info', 'subtype' => array('numeric'), 'calcul' => 'text' ), 'WEATHER_TEMPERATURE_MIN_1' => array( - 'name' => __('Météo Température min j+1', __FILE__), 'familyid' => 'Weather', 'family' => __('Météo', __FILE__), + 'name' => t('Météo Température min j+1'), 'familyid' => 'Weather', 'family' => t('Météo'), 'type' => 'Info', 'subtype' => array('numeric'), 'calcul' => 'avg' ), 'WEATHER_TEMPERATURE_MAX_1' => array( - 'name' => __('Météo Température max j+1', __FILE__), 'familyid' => 'Weather', 'family' => __('Météo', __FILE__), + 'name' => t('Météo Température max j+1'), 'familyid' => 'Weather', 'family' => t('Météo'), 'type' => 'Info', 'subtype' => array('numeric'), 'calcul' => 'avg' ), 'WEATHER_CONDITION_1' => array( - 'name' => __('Météo condition j+1', __FILE__), 'familyid' => 'Weather', 'family' => __('Météo', __FILE__), + 'name' => t('Météo condition j+1'), 'familyid' => 'Weather', 'family' => t('Météo'), 'type' => 'Info', 'subtype' => array('string'), 'calcul' => 'text' ), 'WEATHER_CONDITION_ID_1' => array( - 'name' => __('Météo condition (id) j+1', __FILE__), 'familyid' => 'Weather', 'family' => __('Météo', __FILE__), + 'name' => t('Météo condition (id) j+1'), 'familyid' => 'Weather', 'family' => t('Météo'), 'type' => 'Info', 'subtype' => array('numeric'), 'calcul' => 'text' ), 'WEATHER_TEMPERATURE_MIN_2' => array( - 'name' => __('Météo Température min j+2', __FILE__), 'familyid' => 'Weather', 'family' => __('Météo', __FILE__), + 'name' => t('Météo Température min j+2'), 'familyid' => 'Weather', 'family' => t('Météo'), 'type' => 'Info', 'subtype' => array('numeric'), 'calcul' => 'avg' ), 'WEATHER_TEMPERATURE_MAX_2' => array( - 'name' => __('Météo condition j+1 max j+2', __FILE__), 'familyid' => 'Weather', 'family' => __('Météo', __FILE__), + 'name' => t('Météo condition j+1 max j+2'), 'familyid' => 'Weather', 'family' => t('Météo'), 'type' => 'Info', 'subtype' => array('numeric'), 'calcul' => 'avg' ), 'WEATHER_CONDITION_2' => array( - 'name' => __('Météo condition j+2', __FILE__), 'familyid' => 'Weather', 'family' => __('Météo', __FILE__), + 'name' => t('Météo condition j+2'), 'familyid' => 'Weather', 'family' => t('Météo'), 'type' => 'Info', 'subtype' => array('string'), 'calcul' => 'text' ), 'WEATHER_CONDITION_ID_2' => array( - 'name' => __('Météo condition (id) j+2', __FILE__), 'familyid' => 'Weather', 'family' => __('Météo', __FILE__), + 'name' => t('Météo condition (id) j+2'), 'familyid' => 'Weather', 'family' => t('Météo'), 'type' => 'Info', 'subtype' => array('numeric'), 'calcul' => 'text' ), 'WEATHER_TEMPERATURE_MIN_3' => array( - 'name' => __('Météo Température min j+3', __FILE__), 'familyid' => 'Weather', 'family' => __('Météo', __FILE__), + 'name' => t('Météo Température min j+3'), 'familyid' => 'Weather', 'family' => t('Météo'), 'type' => 'Info', 'subtype' => array('numeric'), 'calcul' => 'avg' ), 'WEATHER_TEMPERATURE_MAX_3' => array( - 'name' => __('Météo Température max j+3', __FILE__), 'familyid' => 'Weather', 'family' => __('Météo', __FILE__), + 'name' => t('Météo Température max j+3'), 'familyid' => 'Weather', 'family' => t('Météo'), 'type' => 'Info', 'subtype' => array('numeric'), 'calcul' => 'avg' ), 'WEATHER_CONDITION_3' => array( - 'name' => __('Météo condition j+3', __FILE__), 'familyid' => 'Weather', 'family' => __('Météo', __FILE__), + 'name' => t('Météo condition j+3'), 'familyid' => 'Weather', 'family' => t('Météo'), 'type' => 'Info', 'subtype' => array('string'), 'calcul' => 'text' ), 'WEATHER_CONDITION_ID_3' => array( - 'name' => __('Météo condition (id) j+3', __FILE__), 'familyid' => 'Weather', 'family' => __('Météo', __FILE__), + 'name' => t('Météo condition (id) j+3'), 'familyid' => 'Weather', 'family' => t('Météo'), 'type' => 'Info', 'subtype' => array('numeric'), 'calcul' => 'text' ), 'WEATHER_TEMPERATURE_MIN_4' => array( - 'name' => __('Météo Température min j+4', __FILE__), 'familyid' => 'Weather', 'family' => __('Météo', __FILE__), + 'name' => t('Météo Température min j+4'), 'familyid' => 'Weather', 'family' => t('Météo'), 'type' => 'Info', 'subtype' => array('numeric'), 'calcul' => 'avg' ), 'WEATHER_TEMPERATURE_MAX_4' => array( - 'name' => __('Météo Température max j+4', __FILE__), 'familyid' => 'Weather', 'family' => __('Météo', __FILE__), + 'name' => t('Météo Température max j+4'), 'familyid' => 'Weather', 'family' => t('Météo'), 'type' => 'Info', 'subtype' => array('numeric'), 'calcul' => 'avg' ), 'WEATHER_CONDITION_4' => array( - 'name' => __('Météo condition j+4', __FILE__), 'familyid' => 'Weather', 'family' => __('Météo', __FILE__), + 'name' => t('Météo condition j+4'), 'familyid' => 'Weather', 'family' => t('Météo'), 'type' => 'Info', 'subtype' => array('string'), 'calcul' => 'text' ), 'WEATHER_CONDITION_ID_4' => array( - 'name' => __('Météo condition (id) j+4', __FILE__), 'familyid' => 'Weather', 'family' => __('Météo', __FILE__), + 'name' => t('Météo condition (id) j+4'), 'familyid' => 'Weather', 'family' => t('Météo'), 'type' => 'Info', 'subtype' => array('numeric'), 'calcul' => 'text' ), 'RAIN_CURRENT' => array( - 'name' => __('Pluie (mm/h)', __FILE__), 'familyid' => 'Weather', 'family' => __('Météo', __FILE__), + 'name' => t('Pluie (mm/h)'), 'familyid' => 'Weather', 'family' => t('Météo'), 'type' => 'Info', 'subtype' => array('numeric'), 'calcul' => 'avg' ), 'RAIN_TOTAL' => array( - 'name' => __('Pluie (accumulation)', __FILE__), 'familyid' => 'Weather', 'family' => __('Météo', __FILE__), + 'name' => t('Pluie (accumulation)'), 'familyid' => 'Weather', 'family' => t('Météo'), 'type' => 'Info', 'subtype' => array('numeric'), 'calcul' => 'avg' ), 'WIND_SPEED' => array( - 'name' => __('Vent (vitesse)', __FILE__), 'familyid' => 'Weather', 'family' => __('Météo', __FILE__), + 'name' => t('Vent (vitesse)'), 'familyid' => 'Weather', 'family' => t('Météo'), 'type' => 'Info', 'subtype' => array('numeric'), 'calcul' => 'avg' ), 'WIND_DIRECTION' => array( - 'name' => __('Vent (direction)', __FILE__), 'familyid' => 'Weather', 'family' => __('Météo', __FILE__), + 'name' => t('Vent (direction)'), 'familyid' => 'Weather', 'family' => t('Météo'), 'type' => 'Info', 'subtype' => array('numeric'), 'calcul' => 'avg' ), 'POWER' => array( - 'name' => __('Puissance Electrique', __FILE__), 'familyid' => 'Electricity', 'family' => __('Electricité', __FILE__), + 'name' => t('Puissance Electrique'), 'familyid' => 'Electricity', 'family' => t('Electricité'), 'type' => 'Info', 'subtype' => array('numeric') ), 'CONSUMPTION' => array( - 'name' => __('Consommation Electrique', __FILE__), 'familyid' => 'Electricity', 'family' => __('Electricité', __FILE__), + 'name' => t('Consommation Electrique'), 'familyid' => 'Electricity', 'family' => t('Electricité'), 'type' => 'Info', 'subtype' => array('numeric') ), 'DAILY_CONSUMPTION' => array( - 'name' => __('Consommation Electrique Journalière', __FILE__), 'familyid' => 'Electricity', 'family' => __('Electricité', __FILE__), + 'name' => t('Consommation Electrique Journalière'), 'familyid' => 'Electricity', 'family' => t('Electricité'), 'type' => 'Info', 'subtype' => array('numeric') ), 'PRODUCTION' => array( - 'name' => __('Production Electrique', __FILE__), 'familyid' => 'Electricity', 'family' => __('Electricité', __FILE__), + 'name' => t('Production Electrique'), 'familyid' => 'Electricity', 'family' => t('Electricité'), 'type' => 'Info', 'subtype' => array('numeric') ), 'DAILY_PRODUCTION' => array( - 'name' => __('Production Electrique Journalière', __FILE__), 'familyid' => 'Electricity', 'family' => __('Electricité', __FILE__), + 'name' => t('Production Electrique Journalière'), 'familyid' => 'Electricity', 'family' => t('Electricité'), 'type' => 'Info', 'subtype' => array('numeric') ), 'VOLTAGE' => array( - 'name' => __('Tension', __FILE__), 'familyid' => 'Electricity', 'family' => __('Electricité', __FILE__), + 'name' => t('Tension'), 'familyid' => 'Electricity', 'family' => t('Electricité'), 'type' => 'Info', 'subtype' => array('numeric'), 'calcul' => 'avg' ), 'REBOOT' => array( - 'name' => __('Redémarrage', __FILE__), 'familyid' => 'Electricity', 'family' => __('Electricité', __FILE__), + 'name' => t('Redémarrage'), 'familyid' => 'Electricity', 'family' => t('Electricité'), 'type' => 'Action', 'subtype' => array('other') ), 'TEMPERATURE' => array( - 'name' => __('Température', __FILE__), 'familyid' => 'Environment', 'family' => __('Environnement', __FILE__), + 'name' => t('Température'), 'familyid' => 'Environment', 'family' => t('Environnement'), 'type' => 'Info', 'subtype' => array('numeric'), 'calcul' => 'avg' ), 'AIR_QUALITY' => array( - 'name' => __('Qualité de l\'air', __FILE__), 'familyid' => 'Environment', 'family' => __('Environnement', __FILE__), + 'name' => t('Qualité de l\'air'), 'familyid' => 'Environment', 'family' => t('Environnement'), 'type' => 'Info', 'subtype' => array('numeric'), 'calcul' => 'avg' ), 'BRIGHTNESS' => array( - 'name' => __('Luminosité', __FILE__), 'familyid' => 'Environment', 'family' => __('Environnement', __FILE__), + 'name' => t('Luminosité'), 'familyid' => 'Environment', 'family' => t('Environnement'), 'type' => 'Info', 'subtype' => array('numeric'), 'calcul' => 'avg' ), 'PRESENCE' => array( - 'name' => __('Présence', __FILE__), 'familyid' => 'Environment', 'family' => __('Environnement', __FILE__), + 'name' => t('Présence'), 'familyid' => 'Environment', 'family' => t('Environnement'), 'type' => 'Info', 'subtype' => array('binary') ), 'SMOKE' => array( - 'name' => __('Détection de fumée', __FILE__), 'familyid' => 'Environment', 'family' => __('Environnement', __FILE__), + 'name' => t('Détection de fumée'), 'familyid' => 'Environment', 'family' => t('Environnement'), 'type' => 'Info', 'subtype' => array('binary') ), 'HUMIDITY' => array( - 'name' => __('Humidité', __FILE__), 'familyid' => 'Environment', 'family' => __('Environnement', __FILE__), + 'name' => t('Humidité'), 'familyid' => 'Environment', 'family' => t('Environnement'), 'type' => 'Info', 'subtype' => array('numeric'), 'calcul' => 'avg' ), 'UV' => array( - 'name' => __('UV', __FILE__), 'familyid' => 'Environment', 'family' => __('Environnement', __FILE__), + 'name' => t('UV'), 'familyid' => 'Environment', 'family' => t('Environnement'), 'type' => 'Info', 'subtype' => array('numeric'), 'calcul' => 'avg' ), 'CO2' => array( - 'name' => __('CO2 (ppm)', __FILE__), 'familyid' => 'Environment', 'family' => __('Environnement', __FILE__), + 'name' => t('CO2 (ppm)'), 'familyid' => 'Environment', 'family' => t('Environnement'), 'type' => 'Info', 'subtype' => array('numeric'), 'calcul' => 'avg' ), 'CO' => array( - 'name' => __('CO (ppm)', __FILE__), 'familyid' => 'Environment', 'family' => __('Environnement', __FILE__), + 'name' => t('CO (ppm)'), 'familyid' => 'Environment', 'family' => t('Environnement'), 'type' => 'Info', 'subtype' => array('numeric'), 'calcul' => 'avg' ), 'NOISE' => array( - 'name' => __('Son (dB)', __FILE__), 'familyid' => 'Environment', 'family' => __('Environnement', __FILE__), + 'name' => t('Son (dB)'), 'familyid' => 'Environment', 'family' => t('Environnement'), 'type' => 'Info', 'subtype' => array('numeric'), 'calcul' => 'avg' ), 'PRESSURE' => array( - 'name' => __('Pression', __FILE__), 'familyid' => 'Environment', 'family' => __('Environnement', __FILE__), + 'name' => t('Pression'), 'familyid' => 'Environment', 'family' => t('Environnement'), 'type' => 'Info', 'subtype' => array('numeric'), 'calcul' => 'avg' ), 'WATER_LEAK' => array( - 'name' => __('Fuite d\'eau', __FILE__), 'familyid' => 'Environment', 'family' => __('Environnement', __FILE__), + 'name' => t('Fuite d\'eau'), 'familyid' => 'Environment', 'family' => t('Environnement'), 'type' => 'Info' ), 'FILTER_CLEAN_STATE' => array( - 'name' => __('Etat du filtre', __FILE__), 'familyid' => 'Environment', 'family' => __('Environnement', __FILE__), + 'name' => t('Etat du filtre'), 'familyid' => 'Environment', 'family' => t('Environnement'), 'type' => 'Info', 'subtype' => array('binary') ), 'DEPTH' => array( - 'name' => __('Profondeur', __FILE__), 'familyid' => 'Generic', 'family' => __('Generic', __FILE__), + 'name' => t('Profondeur'), 'familyid' => 'Generic', 'family' => t('Generic'), 'type' => 'Info', 'subtype' => array('numeric'), 'calcul' => 'avg' ), 'DISTANCE' => array( - 'name' => __('Distance', __FILE__), 'familyid' => 'Generic', 'family' => __('Generic', __FILE__), + 'name' => t('Distance'), 'familyid' => 'Generic', 'family' => t('Generic'), 'type' => 'Info', 'subtype' => array('numeric'), 'calcul' => 'avg' ), 'BUTTON' => array( - 'name' => __('Bouton', __FILE__), 'familyid' => 'Generic', 'family' => __('Generic', __FILE__), + 'name' => t('Bouton'), 'familyid' => 'Generic', 'family' => t('Generic'), 'type' => 'Info', 'subtype' => array('binary', 'numeric') ), 'GENERIC_INFO' => array( - 'name' => ' ' . __('Générique', __FILE__), 'familyid' => 'Generic', 'family' => __('Generic', __FILE__), + 'name' => t('Générique', ' '), 'familyid' => 'Generic', 'family' => t('Generic'), 'type' => 'Info' ), 'GENERIC_ACTION' => array( - 'name' => ' ' . __('Générique', __FILE__), 'familyid' => 'Generic', 'family' => __('Generic', __FILE__), + 'name' => t('Générique', ' '), 'familyid' => 'Generic', 'family' => t('Generic'), 'type' => 'Action' ), 'DONT' => array( - 'name' => __('Ne pas tenir compte de cette commande', __FILE__), 'familyid' => 'Generic', 'family' => __('Generic', __FILE__), + 'name' => t('Ne pas tenir compte de cette commande'), 'familyid' => 'Generic', 'family' => t('Generic'), 'type' => 'All' ), 'BATTERY' => array( - 'name' => __('Batterie', __FILE__), 'familyid' => 'Battery', 'family' => __('Batterie', __FILE__), + 'name' => t('Batterie'), 'familyid' => 'Battery', 'family' => t('Batterie'), 'type' => 'Info', 'subtype' => array('numeric'), 'calcul' => 'avg' ), 'BATTERY_CHARGING' => array( - 'name' => __('Batterie en charge', __FILE__), 'familyid' => 'Battery', 'family' => __('Batterie', __FILE__), + 'name' => t('Batterie en charge'), 'familyid' => 'Battery', 'family' => t('Batterie'), 'type' => 'Info', 'subtype' => array('binary') ), 'VOLUME' => array( - 'name' => __('Volume', __FILE__), 'familyid' => 'Multimedia', 'family' => __('Multimédia', __FILE__), + 'name' => t('Volume'), 'familyid' => 'Multimedia', 'family' => t('Multimédia'), 'type' => 'Info', 'subtype' => array('numeric'), 'calcul' => 'avg' ), 'MEDIA_STATUS' => array( - 'name' => __('Status', __FILE__), 'familyid' => 'Multimedia', 'family' => __('Multimédia', __FILE__), + 'name' => t('Status'), 'familyid' => 'Multimedia', 'family' => t('Multimédia'), 'type' => 'Info', 'subtype' => array('string') ), 'MEDIA_ALBUM' => array( - 'name' => __('Album', __FILE__), 'familyid' => 'Multimedia', 'family' => __('Multimédia', __FILE__), + 'name' => t('Album'), 'familyid' => 'Multimedia', 'family' => t('Multimédia'), 'type' => 'Info', 'subtype' => array('string') ), 'MEDIA_ARTIST' => array( - 'name' => __('Artiste', __FILE__), 'familyid' => 'Multimedia', 'family' => __('Multimédia', __FILE__), + 'name' => t('Artiste'), 'familyid' => 'Multimedia', 'family' => t('Multimédia'), 'type' => 'Info', 'subtype' => array('string') ), 'MEDIA_TITLE' => array( - 'name' => __('Titre', __FILE__), 'familyid' => 'Multimedia', 'family' => __('Multimédia', __FILE__), + 'name' => t('Titre'), 'familyid' => 'Multimedia', 'family' => t('Multimédia'), 'type' => 'Info', 'subtype' => array('string') ), 'MEDIA_POWER' => array( - 'name' => __('Power', __FILE__), 'familyid' => 'Multimedia', 'family' => __('Multimédia', __FILE__), + 'name' => t('Power'), 'familyid' => 'Multimedia', 'family' => t('Multimédia'), 'type' => 'Info', 'subtype' => array('string') ), 'SET_VOLUME' => array( - 'name' => __('Volume', __FILE__), 'familyid' => 'Multimedia', 'family' => __('Multimédia', __FILE__), + 'name' => t('Volume'), 'familyid' => 'Multimedia', 'family' => t('Multimédia'), 'type' => 'Action', 'subtype' => array('slider') ), 'CHANNEL' => array( - 'name' => __('Chaine', __FILE__), 'familyid' => 'Multimedia', 'family' => __('Multimédia', __FILE__), + 'name' => t('Chaine'), 'familyid' => 'Multimedia', 'family' => t('Multimédia'), 'type' => 'Info', 'subtype' => array('numeric', 'string'), 'calcul' => 'text' ), 'SET_CHANNEL' => array( - 'name' => __('Chaine', __FILE__), 'familyid' => 'Multimedia', 'family' => __('Multimédia', __FILE__), + 'name' => t('Chaine'), 'familyid' => 'Multimedia', 'family' => t('Multimédia'), 'type' => 'Action', 'subtype' => array('other', 'slider') ), 'MEDIA_PAUSE' => array( - 'name' => __('Pause', __FILE__), 'familyid' => 'Multimedia', 'family' => __('Multimédia', __FILE__), + 'name' => t('Pause'), 'familyid' => 'Multimedia', 'family' => t('Multimédia'), 'type' => 'Action', 'subtype' => array('other') ), 'MEDIA_RESUME' => array( - 'name' => __('Lecture', __FILE__), 'familyid' => 'Multimedia', 'family' => __('Multimédia', __FILE__), + 'name' => t('Lecture'), 'familyid' => 'Multimedia', 'family' => t('Multimédia'), 'type' => 'Action', 'subtype' => array('other') ), 'MEDIA_STOP' => array( - 'name' => __('Stop', __FILE__), 'familyid' => 'Multimedia', 'family' => __('Multimédia', __FILE__), + 'name' => t('Stop'), 'familyid' => 'Multimedia', 'family' => t('Multimédia'), 'type' => 'Action', 'subtype' => array('other') ), 'MEDIA_NEXT' => array( - 'name' => __('Suivant', __FILE__), 'familyid' => 'Multimedia', 'family' => __('Multimédia', __FILE__), + 'name' => t('Suivant'), 'familyid' => 'Multimedia', 'family' => t('Multimédia'), 'type' => 'Action', 'subtype' => array('other') ), 'MEDIA_PREVIOUS' => array( - 'name' => __('Précedent', __FILE__), 'familyid' => 'Multimedia', 'family' => __('Multimédia', __FILE__), + 'name' => t('Précedent'), 'familyid' => 'Multimedia', 'family' => t('Multimédia'), 'type' => 'Action', 'subtype' => array('other') ), 'MEDIA_ON' => array( - 'name' => __('On', __FILE__), 'familyid' => 'Multimedia', 'family' => __('Multimédia', __FILE__), + 'name' => t('On'), 'familyid' => 'Multimedia', 'family' => t('Multimédia'), 'type' => 'Action', 'subtype' => array('other') ), 'MEDIA_OFF' => array( - 'name' => __('Off', __FILE__), 'familyid' => 'Multimedia', 'family' => __('Multimédia', __FILE__), + 'name' => t('Off'), 'familyid' => 'Multimedia', 'family' => t('Multimédia'), 'type' => 'Action', 'subtype' => array('other') ), 'MEDIA_STATE' => array( - 'name' => __('Etat', __FILE__), 'familyid' => 'Multimedia', 'family' => __('Multimédia', __FILE__), + 'name' => t('Etat'), 'familyid' => 'Multimedia', 'family' => t('Multimédia'), 'type' => 'Info', 'subtype' => array('binary') ), 'MEDIA_MUTE' => array( - 'name' => __('Muet', __FILE__), 'familyid' => 'Multimedia', 'family' => __('Multimédia', __FILE__), + 'name' => t('Muet'), 'familyid' => 'Multimedia', 'family' => t('Multimédia'), 'type' => 'Action', 'subtype' => array('other') ), 'MEDIA_UNMUTE' => array( - 'name' => __('Non Muet', __FILE__), 'familyid' => 'Multimedia', 'family' => __('Multimédia', __FILE__), + 'name' => t('Non Muet'), 'familyid' => 'Multimedia', 'family' => t('Multimédia'), 'type' => 'Action', 'subtype' => array('other') ), 'FAN_SPEED' => array( - 'name' => __('Vitesse ventilateur', __FILE__), 'familyid' => 'Fan', 'family' => __('Ventilateur', __FILE__), + 'name' => t('Vitesse ventilateur'), 'familyid' => 'Fan', 'family' => t('Ventilateur'), 'type' => 'Action', 'subtype' => array('slider') ), 'FAN_SPEED_STATE' => array( - 'name' => __('Vitesse ventilateur Etat', __FILE__), 'familyid' => 'Fan', 'family' => __('Ventilateur', __FILE__), + 'name' => t('Vitesse ventilateur Etat'), 'familyid' => 'Fan', 'family' => t('Ventilateur'), 'type' => 'Info', 'subtype' => array('numeric'), 'calcul' => 'avg' ), 'ROTATION' => array( - 'name' => __('Rotation', __FILE__), 'familyid' => 'Fan', 'family' => __('Ventilateur', __FILE__), + 'name' => t('Rotation'), 'familyid' => 'Fan', 'family' => t('Ventilateur'), 'type' => 'Action', 'subtype' => array('slider') ), 'ROTATION_STATE' => array( - 'name' => __('Rotation Etat', __FILE__), 'familyid' => 'Fan', 'family' => __('Ventilateur', __FILE__), + 'name' => t('Rotation Etat'), 'familyid' => 'Fan', 'family' => t('Ventilateur'), 'type' => 'Info', 'subtype' => array('numeric'), 'calcul' => 'avg' ), 'DOCK' => array( - 'name' => __('Retour base', __FILE__), 'familyid' => 'Robot', 'family' => __('Robot', __FILE__), + 'name' => t('Retour base'), 'familyid' => 'Robot', 'family' => t('Robot'), 'type' => 'Action', 'subtype' => array('other') ), 'DOCK_STATE' => array( - 'name' => __('Base Etat', __FILE__), 'familyid' => 'Robot', 'family' => __('Robot', __FILE__), + 'name' => t('Base Etat'), 'familyid' => 'Robot', 'family' => t('Robot'), 'type' => 'Info', 'subtype' => array('binary') ), 'TIMER' => array( - 'name' => __('Minuteur Etat', __FILE__), 'familyid' => 'Other', 'family' => __('Autre', __FILE__), + 'name' => t('Minuteur Etat'), 'familyid' => 'Other', 'family' => t('Autre'), 'type' => 'Info', 'subtype' => array('numeric'), 'calcul' => 'avg' ), 'SET_TIMER' => array( - 'name' => __('Minuteur', __FILE__), 'familyid' => 'Other', 'family' => __('Autre', __FILE__), + 'name' => t('Minuteur'), 'familyid' => 'Other', 'family' => t('Autre'), 'type' => 'Action', 'subtype' => array('slider') ), 'TIMER_STATE' => array( - 'name' => __('Minuteur Etat (pause ou non)', __FILE__), 'familyid' => 'Other', 'family' => __('Autre', __FILE__), + 'name' => t('Minuteur Etat (pause ou non)'), 'familyid' => 'Other', 'family' => t('Autre'), 'type' => 'Info', 'subtype' => array('binary', 'numeric'), 'calcul' => 'avg' ), 'TIMER_PAUSE' => array( - 'name' => __('Minuteur pause', __FILE__), 'familyid' => 'Other', 'family' => __('Autre', __FILE__), + 'name' => t('Minuteur pause'), 'familyid' => 'Other', 'family' => t('Autre'), 'type' => 'Action', 'subtype' => array('other') ), 'TIMER_RESUME' => array( - 'name' => __('Minuteur reprendre', __FILE__), 'familyid' => 'Other', 'family' => __('Autre', __FILE__), + 'name' => t('Minuteur reprendre'), 'familyid' => 'Other', 'family' => t('Autre'), 'type' => 'Action', 'subtype' => array('other') ), ), 'type' => array( 'info' => array( - 'name' => __('Info', __FILE__), + 'name' => t('Info'), 'subtype' => array( 'numeric' => array( - 'name' => __('Numérique', __FILE__), + 'name' => t('Numérique'), 'configuration' => array( 'minValue' => array('visible' => true), 'maxValue' => array('visible' => true), @@ -875,7 +910,7 @@ ), ), 'binary' => array( - 'name' => __('Binaire', __FILE__), + 'name' => t('Binaire'), 'configuration' => array( 'minValue' => array('visible' => false), 'maxValue' => array('visible' => false), @@ -889,7 +924,7 @@ ), ), 'string' => array( - 'name' => __('Autre', __FILE__), + 'name' => t('Autre'), 'configuration' => array( 'minValue' => array('visible' => false), 'maxValue' => array('visible' => false), @@ -905,10 +940,10 @@ ), ), 'action' => array( - 'name' => __('Action', __FILE__), + 'name' => t('Action'), 'subtype' => array( 'other' => array( - 'name' => __('Défaut', __FILE__), + 'name' => t('Défaut'), 'configuration' => array( 'minValue' => array('visible' => false), 'maxValue' => array('visible' => false), @@ -922,7 +957,7 @@ ), ), 'slider' => array( - 'name' => __('Curseur', __FILE__), + 'name' => t('Curseur'), 'configuration' => array( 'minValue' => array('visible' => true), 'maxValue' => array('visible' => true), @@ -936,7 +971,7 @@ ), ), 'message' => array( - 'name' => __('Message', __FILE__), + 'name' => t('Message'), 'configuration' => array( 'minValue' => array('visible' => false), 'maxValue' => array('visible' => false), @@ -950,7 +985,7 @@ ), ), 'color' => array( - 'name' => __('Couleur', __FILE__), + 'name' => t('Couleur'), 'configuration' => array( 'minValue' => array('visible' => false), 'maxValue' => array('visible' => false), @@ -964,7 +999,7 @@ ), ), 'select' => array( - 'name' => __('Liste', __FILE__), + 'name' => t('Liste'), 'configuration' => array( 'minValue' => array('visible' => false), 'maxValue' => array('visible' => false), @@ -983,41 +1018,41 @@ ), ); $GLOBALS['JEEDOM_SCLOG_TEXT'] = array( - 'startManual' => array('txt' => __('Scénario lancé manuellement', __FILE__), 'replace' => ''), - 'startAutoOnEvent' => array('txt' => __('Scénario exécuté automatiquement sur événement venant de :', __FILE__) . ' ', 'replace' => ''), - 'startOnEvent' => array('txt' => __('Scénario exécuté sur événement', __FILE__), 'replace' => ''), - 'startAutoOnShedule' => array('txt' => __('Scénario exécuté automatiquement sur programmation', __FILE__), 'replace' => ''), - 'finishOk' => array('txt' => __('Fin correcte du scénario', __FILE__), 'replace' => ''), - 'sheduledOn' => array('txt' => ' ' . __('programmée à :', __FILE__) . ' ', 'replace' => ''), - 'startByScenario' => array('txt' => __('Lancement provoqué par le scénario :', __FILE__) . ' ', 'replace' => ''), - 'startCausedBy' => array('txt' => __('Lancement provoqué', __FILE__), 'replace' => ''), - 'startSubTask' => array('txt' => __('************Lancement sous tâche**************', __FILE__), 'replace' => ''), - 'endSubTask' => array('txt' => __('************FIN sous tâche**************', __FILE__), 'replace' => ''), - 'sheduleNow' => array('txt' => ' ' . __('lancement immédiat', __FILE__) . ' ', 'replace' => ''), + 'startManual' => array('txt' => t('Scénario lancé manuellement'), 'replace' => ''), + 'startAutoOnEvent' => array('txt' => t('Scénario exécuté automatiquement sur événement venant de :', '', ' '), 'replace' => ''), + 'startOnEvent' => array('txt' => t('Scénario exécuté sur événement'), 'replace' => ''), + 'startAutoOnShedule' => array('txt' => t('Scénario exécuté automatiquement sur programmation'), 'replace' => ''), + 'finishOk' => array('txt' => t('Fin correcte du scénario'), 'replace' => ''), + 'sheduledOn' => array('txt' => t('programmée à :', ' ', ' '), 'replace' => ''), + 'startByScenario' => array('txt' => t('Lancement provoqué par le scénario :', '', ' '), 'replace' => ''), + 'startCausedBy' => array('txt' => t('Lancement provoqué'), 'replace' => ''), + 'startSubTask' => array('txt' => t('************Lancement sous tâche**************'), 'replace' => ''), + 'endSubTask' => array('txt' => t('************FIN sous tâche**************'), 'replace' => ''), + 'sheduleNow' => array('txt' => t('lancement immédiat', ' ', ' '), 'replace' => ''), - 'execAction' => array('txt' => '- ' . __('Exécution du sous-élément de type [action] :', __FILE__) . ' ', 'replace' => ''), - 'execCondition' => array('txt' => '- ' . __('Exécution du sous-élément de type [condition] :', __FILE__) . ' ', 'replace' => ''), + 'execAction' => array('txt' => t('Exécution du sous-élément de type [action] :', '- ', ' '), 'replace' => ''), + 'execCondition' => array('txt' => t('Exécution du sous-élément de type [condition] :', '- ', ' '), 'replace' => ''), - 'execCmd' => array('txt' => __('Exécution de la commande', __FILE__) . ' ', 'replace' => ''), - 'execCode' => array('txt' => __('Exécution d\'un bloc code', __FILE__) . ' ', 'replace' => ''), - 'launchScenario' => array('txt' => __('Lancement du scénario :', __FILE__) . ' ', 'replace' => ''), - 'launchScenarioSync' => array('txt' => __('Lancement du scénario en mode synchrone', __FILE__) . ' ', 'replace' => ''), - 'start' => array('txt' => '-- ' . __('Début :', __FILE__), 'replace' => '::'), - 'task' => array('txt' => __('Tâche :', __FILE__) . ' ', 'replace' => ''), - 'event' => array('txt' => __('Changement de', __FILE__) . ' ', 'replace' => ''), - 'setTag' => array('txt' => __('Mise à jour du tag', __FILE__) . ' ', 'replace' => ''), + 'execCmd' => array('txt' => t('Exécution de la commande', '', ' '), 'replace' => ''), + 'execCode' => array('txt' => t('Exécution d\'un bloc code', '', ' '), 'replace' => ''), + 'launchScenario' => array('txt' => t('Lancement du scénario :', '', ' '), 'replace' => ''), + 'launchScenarioSync' => array('txt' => t('Lancement du scénario en mode synchrone', '', ' '), 'replace' => ''), + 'start' => array('txt' => t('Début :', '-- '), 'replace' => '::'), + 'task' => array('txt' => t('Tâche :', '', ' '), 'replace' => ''), + 'event' => array('txt' => t('Changement de', '', ' '), 'replace' => ''), + 'setTag' => array('txt' => t('Mise à jour du tag', '', ' '), 'replace' => ''), - 'stopTimeout' => array('txt' => __('Arrêt du scénario car il a dépassé son temps de timeout :', __FILE__) . ' ', 'replace' => ''), - 'disableNoSubtask' => array('txt' => __('Scénario désactivé non lancement de la sous tâche', __FILE__), 'replace' => ''), - 'disableEqNoExecCmd' => array('txt' => __('Equipement désactivé - impossible d\'exécuter la commande :', __FILE__) . ' ', 'replace' => ''), - 'toStartUnfound' => array('txt' => __('Eléments à lancer non trouvé', __FILE__), 'replace' => ''), - 'invalideShedule' => array('txt' => __(', heure programmée invalide :', __FILE__) . ' ', 'replace' => ''), - 'noCmdFoundFor' => array('txt' => __('[Erreur] Aucune commande trouvée pour', __FILE__) . ' ', 'replace' => ''), - 'unfoundCmd' => array('txt' => __('Commande introuvable', __FILE__), 'replace' => ''), - 'unfoundCmdCheckId' => array('txt' => __('Commande introuvable - Vérifiez l\'id', __FILE__), 'replace' => ''), - 'unfoundEq' => array('txt' => __('Action sur l\'équipement impossible. Equipement introuvable - Vérifiez l\'id :', __FILE__) . ' ', 'replace' => ''), - 'unfoundScenario' => array('txt' => __('Action sur scénario impossible. Scénario introuvable - Vérifiez l\'id :', __FILE__) . ' ', 'replace' => ''), - 'disableScenario' => array('txt' => __('Impossible d\'exécuter le scénario :', __FILE__) . ' ', 'replace' => ''), - 'invalidExpr' => array('txt' => __('Expression non valide :', __FILE__) . ' ', 'replace' => ''), - 'invalidDuration' => array('txt' => __('Aucune durée trouvée pour l\'action sleep ou la durée n\'est pas valide :', __FILE__) . ' ', 'replace' => ''), + 'stopTimeout' => array('txt' => t('Arrêt du scénario car il a dépassé son temps de timeout :', '', ' '), 'replace' => ''), + 'disableNoSubtask' => array('txt' => t('Scénario désactivé non lancement de la sous tâche'), 'replace' => ''), + 'disableEqNoExecCmd' => array('txt' => t('Equipement désactivé - impossible d\'exécuter la commande :', '', ' '), 'replace' => ''), + 'toStartUnfound' => array('txt' => t('Eléments à lancer non trouvé'), 'replace' => ''), + 'invalideShedule' => array('txt' => t(', heure programmée invalide :', '', ' '), 'replace' => ''), + 'noCmdFoundFor' => array('txt' => t('[Erreur] Aucune commande trouvée pour', '', ' '), 'replace' => ''), + 'unfoundCmd' => array('txt' => t('Commande introuvable'), 'replace' => ''), + 'unfoundCmdCheckId' => array('txt' => t('Commande introuvable - Vérifiez l\'id'), 'replace' => ''), + 'unfoundEq' => array('txt' => t('Action sur l\'équipement impossible. Equipement introuvable - Vérifiez l\'id :', '', ' '), 'replace' => ''), + 'unfoundScenario' => array('txt' => t('Action sur scénario impossible. Scénario introuvable - Vérifiez l\'id :', '', ' '), 'replace' => ''), + 'disableScenario' => array('txt' => t('Impossible d\'exécuter le scénario :', '', ' '), 'replace' => ''), + 'invalidExpr' => array('txt' => t('Expression non valide :', '', ' '), 'replace' => ''), + 'invalidDuration' => array('txt' => t('Aucune durée trouvée pour l\'action sleep ou la durée n\'est pas valide :', '', ' '), 'replace' => ''), ); diff --git a/core/php/core.inc.php b/core/php/core.inc.php index 2502e1ea54..ff2a246471 100644 --- a/core/php/core.inc.php +++ b/core/php/core.inc.php @@ -17,64 +17,49 @@ */ date_default_timezone_set('Europe/Brussels'); require_once __DIR__ . '/../../vendor/autoload.php'; -require_once __DIR__ . '/../config/common.config.php'; -require_once __DIR__ . '/../class/DB.class.php'; -require_once __DIR__ . '/../class/config.class.php'; -require_once __DIR__ . '/../class/jeedom.class.php'; -require_once __DIR__ . '/../class/plugin.class.php'; -require_once __DIR__ . '/../class/translate.class.php'; -require_once __DIR__ . '/utils.inc.php'; -include_file('core', 'jeedom', 'config'); -include_file('core', 'compatibility', 'config'); -include_file('core', 'utils', 'class'); -include_file('core', 'log', 'class'); try { $configs = config::byKeys(array('timezone', 'log::level')); if (isset($configs['timezone'])) { date_default_timezone_set($configs['timezone']); } -} catch (Exception $e) { -} catch (Error $e) { +} catch (\Throwable $throwable) { + error_log('Unable to set timezone: ' . $throwable->getMessage()); } try { if (isset($configs['log::level'])) { log::define_error_reporting($configs['log::level']); } -} catch (Exception $e) { -} catch (Error $e) { +} catch (\Throwable $throwable) { + error_log('Unable to set log level: ' . $throwable->getMessage()); } +/** + * Autoload function for specific Jeedom classes + * this function is called after the default Composer autoloader + * it will load specific classes such as Cmd, Real, etc. + * for plugins that do not use namespaces or Composer autoloading + */ function jeedomAutoload($_classname) { - /* core class always in /core/class : */ - $path = __DIR__ . "/../../core/class/$_classname.class.php"; - if (file_exists($path)) { - include_file('core', $_classname, 'class'); - } else if (substr($_classname, 0, 4) === 'com_') { - /* class com_$1 in /core/com/$1.com.php */ - include_file('core', substr($_classname, 4), 'com'); - } else if (substr($_classname, 0, 5) === 'repo_') { - /* class repo_$1 in /core/repo/$1.repo.php */ - include_file('core', substr($_classname, 5), 'repo'); - } else if (strpos($_classname, '\\') === false && strpos($_classname, '/') === false) { - /* autoload for plugins : no namespace */ - $classname = str_replace(array('Real', 'Cmd'), '', $_classname); + if (strpos($_classname, '\\') !== false || strpos($_classname, '/') !== false) { + return; + } + + /* autoload for plugins : no namespace */ + $classname = str_replace(array('Real', 'Cmd'), '', $_classname); + $plugin_active = config::byKey('active', $classname, null); + if (($plugin_active === null || $plugin_active == '' || $plugin_active == 0) && strpos($classname, '_') !== false) { + $classname = explode('_', $classname)[0]; $plugin_active = config::byKey('active', $classname, null); - if (($plugin_active === null || $plugin_active == '' || $plugin_active == 0) && strpos($classname, '_') !== false) { - $classname = explode('_', $classname)[0]; - $plugin_active = config::byKey('active', $classname, null); - } - if ($plugin_active == 1) { - try { - include_file('core', $classname, 'class', $classname); - } catch (Exception $e) { - - } catch (Error $e) { - - } + } + if ($plugin_active == 1) { + try { + include_file('core', $classname, 'class', $classname); + } catch (\Throwable $throwable) { + error_log('Error loading class ' . $classname . ': ' . $throwable->getMessage()); } } } -spl_autoload_register('jeedomAutoload', true, true); +spl_autoload_register('jeedomAutoload'); diff --git a/core/php/utils.inc.php b/core/php/utils.inc.php index 08b0613c92..858de46155 100644 --- a/core/php/utils.inc.php +++ b/core/php/utils.inc.php @@ -1839,3 +1839,13 @@ function implode_recursive($_array, $_separator, $_key = '') { } return $result; } + + function __($_content, $_name, $_backslash = false) + { + try { + return translate::sentence(str_replace("\'", "'", $_content), $_name, $_backslash); + } catch (\Throwable $t) { + error_log($t->getMessage()); + throw $t; + } + }