removed dashboard bundle as it has moved to https://github.com/openhab/openhab-webui (#586)

Signed-off-by: Kai Kreuzer <kai@openhab.org>
This commit is contained in:
Kai Kreuzer 2019-02-20 06:37:41 +01:00 committed by Markus Rathgeb
parent 363a437347
commit fb0470c6d1
73 changed files with 0 additions and 1740 deletions

View File

@ -502,12 +502,6 @@
<version>${project.version}</version> <version>${project.version}</version>
<scope>compile</scope> <scope>compile</scope>
</dependency> </dependency>
<dependency>
<groupId>org.openhab.core.bundles</groupId>
<artifactId>org.openhab.core.ui.dashboard</artifactId>
<version>${project.version}</version>
<scope>compile</scope>
</dependency>
<dependency> <dependency>
<groupId>org.openhab.core.bundles</groupId> <groupId>org.openhab.core.bundles</groupId>
<artifactId>org.openhab.core.ui.icon</artifactId> <artifactId>org.openhab.core.ui.icon</artifactId>

View File

@ -1,42 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" output="target/classes" path="src/main/java">
<attributes>
<attribute name="optional" value="true"/>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry excluding="**" kind="src" output="target/classes" path="templates">
<attributes>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry excluding="**" kind="src" output="target/classes" path="web">
<attributes>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="src" output="target/test-classes" path="src/test/java">
<attributes>
<attribute name="optional" value="true"/>
<attribute name="maven.pomderived" value="true"/>
<attribute name="test" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
<attributes>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
<attributes>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources">
<attributes>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="output" path="target/classes"/>
</classpath>

View File

@ -1,23 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>org.openhab.core.ui.dashboard</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.m2e.core.maven2Builder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.jdt.core.javanature</nature>
<nature>org.eclipse.m2e.core.maven2Nature</nature>
</natures>
</projectDescription>

View File

@ -1,7 +0,0 @@
eclipse.preferences.version=1
encoding//src/main/java=UTF-8
encoding//src/main/resources=UTF-8
encoding/<project>=UTF-8
encoding/ESH-INF=UTF-8
encoding/templates=UTF-8
encoding/web=UTF-8

View File

@ -1,4 +0,0 @@
activeProfiles=
eclipse.preferences.version=1
resolveWorkspaceProjects=true
version=1

View File

@ -1,13 +0,0 @@
This content is produced and maintained by the openHAB project.
* Project home: https://www.openhab.org
== Declared Project Licenses
This program and the accompanying materials are made available under the terms
of the Eclipse Public License 2.0 which is available at
https://www.eclipse.org/legal/epl-2.0/.
== Source Code
https://github.com/openhab/openhab-core

View File

@ -1,48 +0,0 @@
# Dashboard
The openHAB dashboard is a landing page for the user where all openHAB UIs can be found.
The Dashboard also supports links to external services.
Links can be added to the dashboard by editing the `$OPENHAB_CONF/services/dashboard.cfg` configuration file.
## Link Configuration
| Parameter Name | Type | Description |
|-------------------------------|---------|-----------------------------------------------|
| `<unique-name>.link-name` | String | Name which is shown in the openHAB dashboard. |
| `<unique-name>.link-url` | String | URL to external service. |
| `<unique-name>.link-imageurl` | String | URL to image which is shown in the dashboard. |
Where `<unique-name>` is link unique identifier (see examples).
Link-url support following special words:
| Special word | Replaced to |
|-----------------------------|-------------------------------------------|
| {HOST} | host name including possible port number |
| {HOSTNAME} | host name |
### Image
A png image of 350px width and 200-250px height are recommended.
The `imageurl` property can either be a direct HTTP link or data URIs according to [RFC2397](https://tools.ietf.org/html/rfc2397). If data URIs are used, browser should support them as well. All five major browsers (Chrome, Firefox, IE, Opera and Safari) support data URIs. See e.g. [https://www.base64-image.de](https://www.base64-image.de) to convert images to base64 coded data.
## Example Configuration File
```
frontail.link-name=openHAB Log Viewer
frontail.link-url=http://<server-adddress>:9001
frontail.link-imageurl=../static/image.png
nodered.link-name=Node-RED
nodered.link-url=http://<server-adddress>:1880
nodered.link-imageurl=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAXwAAACfCAIAAA...QmCC
nodered.link-name=Node-RED
nodered.link-url=http://{HOSTNAME}:1880
nodered.link-imageurl=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAXwAAACfCAIAAA...QmCC
```
Note: **nodered** image data URL is not valid (it's shorten for the sake of clarity).

View File

@ -1,53 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.openhab.core.bundles</groupId>
<artifactId>org.openhab.core.reactor.bundles</artifactId>
<version>2.5.0-SNAPSHOT</version>
</parent>
<artifactId>org.openhab.core.ui.dashboard</artifactId>
<name>openHAB Core :: Bundles :: Dashboard UI</name>
<dependencies>
<dependency>
<groupId>org.openhab.core.bundles</groupId>
<artifactId>org.openhab.core.boot</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<executions>
<execution>
<phase>generate-resources</phase>
<goals>
<goal>add-resource</goal>
</goals>
<configuration>
<resources>
<resource>
<directory>templates</directory>
<targetPath>templates</targetPath>
</resource>
<resource>
<directory>web</directory>
<targetPath>web</targetPath>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

View File

@ -1,23 +0,0 @@
/**
* Copyright (c) 2010-2019 Contributors to the openHAB project
*
* See the NOTICE file(s) distributed with this work for additional
* information.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0
*
* SPDX-License-Identifier: EPL-2.0
*/
package org.openhab.ui.dashboard;
/**
* This is a marker interface to declare that the dashboard is up and ready to be used.
*
* @author Kai Kreuzer - Initial contribution
*
*/
public interface DashboardReady {
}

View File

@ -1,54 +0,0 @@
/**
* Copyright (c) 2010-2019 Contributors to the openHAB project
*
* See the NOTICE file(s) distributed with this work for additional
* information.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0
*
* SPDX-License-Identifier: EPL-2.0
*/
package org.openhab.ui.dashboard;
/**
* A dashboard tile must be registered as a service in order to appear on the openHAB dashboard.
* Note that it is currently not possible to provide a background image - this needs to be
* available within the dashboard bundle itself at the moment.
*
* @author Kai Kreuzer
*
*/
public interface DashboardTile {
/**
* The name that should appear on the tile
*
* @return name of the tile
*/
String getName();
/**
* The url to point to (if it is a local UI, it should be a relative path starting with "../")
*
* @return the url
*/
String getUrl();
/**
* The url to point to for the dashboard tile.
* (if it is a local UI, it should be a relative path starting with "../")
*
* @return the tile url
*/
String getImageUrl();
/**
* An HTML5 overlay icon to use for the tile, e.g. "html5", "android" or "apple".
*
* @return the overlay to use
*/
String getOverlay();
}

View File

@ -1,264 +0,0 @@
/**
* Copyright (c) 2010-2019 Contributors to the openHAB project
*
* See the NOTICE file(s) distributed with this work for additional
* information.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0
*
* SPDX-License-Identifier: EPL-2.0
*/
package org.openhab.ui.dashboard.internal;
import java.io.IOException;
import java.net.URL;
import java.util.Hashtable;
import java.util.Locale;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.CopyOnWriteArraySet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import org.apache.commons.io.IOUtils;
import org.eclipse.smarthome.core.i18n.LocaleProvider;
import org.eclipse.smarthome.core.i18n.TranslationProvider;
import org.eclipse.smarthome.core.net.HttpServiceUtil;
import org.eclipse.smarthome.core.net.NetworkAddressService;
import org.openhab.ui.dashboard.DashboardReady;
import org.openhab.ui.dashboard.DashboardTile;
import org.osgi.framework.BundleContext;
import org.osgi.service.cm.ConfigurationAdmin;
import org.osgi.service.component.ComponentContext;
import org.osgi.service.component.ComponentException;
import org.osgi.service.component.annotations.Activate;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Deactivate;
import org.osgi.service.component.annotations.Reference;
import org.osgi.service.component.annotations.ReferenceCardinality;
import org.osgi.service.component.annotations.ReferencePolicy;
import org.osgi.service.http.HttpService;
import org.osgi.service.http.NamespaceException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* This component registers the dashboard resources.
*
* @author Kai Kreuzer - Initial contribution
* @author Laurent Garnier - internationalization
* @author Hilbrand Bouwkamp - internationalization
*/
@Component(service = { DashboardService.class, DashboardReady.class }, immediate = true, name = "org.openhab.dashboard")
public class DashboardService implements DashboardReady {
public static final String DASHBOARD_ALIAS = "/start";
/** the name of the servlet to be used in the URL */
public static final String SERVLET_NAME = "index";
private static final Logger logger = LoggerFactory.getLogger(DashboardService.class);
protected HttpService httpService;
protected ConfigurationAdmin configurationAdmin;
protected NetworkAddressService networkAddressService;
protected TranslationProvider i18nProvider;
protected LocaleProvider localeProvider;
protected Set<DashboardTile> tiles = new CopyOnWriteArraySet<>();
private BundleContext bundleContext;
private final static String LINK_NAME = "link-name";
private final static String LINK_URL = "link-url";
private final static String LINK_IMAGEURL = "link-imageurl";
@Activate
protected void activate(ComponentContext componentContext, Map<String, Object> properties) {
try {
bundleContext = componentContext.getBundleContext();
Hashtable<String, String> props = new Hashtable<>();
httpService.registerServlet(DASHBOARD_ALIAS + "/" + SERVLET_NAME, createServlet(), props,
httpService.createDefaultHttpContext());
httpService.registerResources(DASHBOARD_ALIAS, "web", null);
if (HttpServiceUtil.getHttpServicePort(bundleContext) > 0) {
logger.info("Started Dashboard at http://{}:{}", networkAddressService.getPrimaryIpv4HostAddress(),
HttpServiceUtil.getHttpServicePort(bundleContext));
}
if (HttpServiceUtil.getHttpServicePortSecure(bundleContext) > 0) {
logger.info("Started Dashboard at https://{}:{}", networkAddressService.getPrimaryIpv4HostAddress(),
HttpServiceUtil.getHttpServicePortSecure(bundleContext));
}
} catch (NamespaceException | ServletException e) {
logger.error("Error during Dashboard startup: {}", e.getMessage());
}
addTilesForExternalServices(properties);
}
@Deactivate
protected void deactivate(ComponentContext componentContext) {
httpService.unregister(DASHBOARD_ALIAS + "/" + SERVLET_NAME);
httpService.unregister(DASHBOARD_ALIAS);
logger.info("Stopped Dashboard");
}
@Reference
protected void setConfigurationAdmin(ConfigurationAdmin configurationAdmin) {
this.configurationAdmin = configurationAdmin;
}
protected void unsetConfigurationAdmin(ConfigurationAdmin configurationAdmin) {
this.configurationAdmin = null;
}
@Reference
protected void setHttpService(HttpService httpService) {
this.httpService = httpService;
}
protected void unsetHttpService(HttpService httpService) {
this.httpService = null;
}
@Reference
protected void setNetworkAddressService(NetworkAddressService networkAddressService) {
this.networkAddressService = networkAddressService;
}
protected void unsetNetworkAddressService(NetworkAddressService networkAddressService) {
this.networkAddressService = null;
}
@Reference
protected void setLocaleProvider(final LocaleProvider localeProvider) {
this.localeProvider = localeProvider;
}
protected void unsetLocaleProvider(final LocaleProvider localeProvider) {
this.localeProvider = null;
}
@Reference
public void setTranslationProvider(TranslationProvider i18nProvider) {
this.i18nProvider = i18nProvider;
}
public void unsetTranslationProvider(TranslationProvider i18nProvider) {
this.i18nProvider = null;
}
@Reference(cardinality = ReferenceCardinality.MULTIPLE, policy = ReferencePolicy.DYNAMIC)
protected void addDashboardTile(DashboardTile tile) {
tiles.add(tile);
}
protected void removeDashboardTile(DashboardTile tile) {
tiles.remove(tile);
}
protected HttpServlet createServlet() {
String indexTemplate;
String entryTemplate;
String warnTemplate;
String setupTemplate;
URL index = bundleContext.getBundle().getEntry("templates/index.html");
if (index != null) {
try {
indexTemplate = IOUtils.toString(index.openStream());
} catch (IOException e) {
throw new ComponentException(e);
}
} else {
throw new ComponentException("Cannot find index.html - failed to initialize Dashboard servlet");
}
URL entry = bundleContext.getBundle().getEntry("templates/entry.html");
if (entry != null) {
try {
entryTemplate = IOUtils.toString(entry.openStream());
} catch (IOException e) {
throw new ComponentException(e);
}
} else {
throw new ComponentException("Cannot find entry.html - failed to initialize Dashboard servlet");
}
URL warn = bundleContext.getBundle().getEntry("templates/warn.html");
if (warn != null) {
try {
warnTemplate = IOUtils.toString(warn.openStream());
} catch (IOException e) {
throw new ComponentException(e);
}
} else {
throw new RuntimeException("Cannot find warn.html - failed to initialize Dashboard servlet");
}
URL setup = bundleContext.getBundle().getEntry("templates/setup.html");
if (setup != null) {
try {
setupTemplate = IOUtils.toString(setup.openStream());
} catch (IOException e) {
throw new ComponentException(e);
}
} else {
throw new ComponentException("Cannot find setup.html - failed to initialize Dashboard servlet");
}
return new DashboardServlet(configurationAdmin, indexTemplate, entryTemplate, warnTemplate, setupTemplate,
tiles, this::getLocalizedText);
}
private void addTilesForExternalServices(Map<String, Object> properties) {
for (String key : properties.keySet()) {
if (key.endsWith(LINK_NAME)) {
if (key.length() > LINK_NAME.length()) {
// get prefix from link name
String linkname = key.substring(0, key.length() - LINK_NAME.length());
String name = (String) properties.get(linkname + LINK_NAME);
String url = (String) properties.get(linkname + LINK_URL);
String imageUrl = (String) properties.get(linkname + LINK_IMAGEURL);
DashboardTile newTile = new ExternalServiceTile.DashboardTileBuilder().withName(name).withUrl(url)
.withImageUrl(imageUrl).build();
if (name != null && url != null && !name.isEmpty() && !url.isEmpty()) {
addDashboardTile(newTile);
logger.debug("Tile added to Dashboard: {}", newTile);
} else {
logger.warn("Ignore invalid tile '{}': {}", linkname, newTile);
}
}
}
}
}
/**
* Returns the localized text for the given key. When the key is 'locale' it returns the locale. If no locale or
* fall-back would be present it returns the key.
*
* @param key key to get locale from
* @return localized text for the key
*/
private String getLocalizedText(String key) {
Locale useLocale = localeProvider.getLocale() == null ? Locale.ENGLISH : localeProvider.getLocale();
if ("locale".equals(key)) {
// The return value for "locale" key is an ISO 639-1 language code
// In case there is no translation for the used locale provided with the dashboard, "en" is returned
return bundleContext.getBundle()
.getEntry("ESH-INF/i18n/dashboard_" + useLocale.getLanguage() + ".properties") != null
? useLocale.getLanguage()
: "en";
} else {
return i18nProvider.getText(bundleContext.getBundle(), key, key, useLocale);
}
}
}

View File

@ -1,230 +0,0 @@
/**
* Copyright (c) 2010-2019 Contributors to the openHAB project
*
* See the NOTICE file(s) distributed with this work for additional
* information.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0
*
* SPDX-License-Identifier: EPL-2.0
*/
package org.openhab.ui.dashboard.internal;
import java.io.IOException;
import java.util.Dictionary;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Map;
import java.util.Set;
import java.util.function.Function;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.openhab.core.OpenHAB;
import org.openhab.ui.dashboard.DashboardTile;
import org.osgi.service.cm.Configuration;
import org.osgi.service.cm.ConfigurationAdmin;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* This servlet constructs the main HTML page for the dashboard, listing all DashboardTiles
* that are registered as a service.
*
* @author Kai Kreuzer
* @author Laurent Garnier - internationalization
* @author Hilbrand Bouwkamp - internationalization
*
*/
public class DashboardServlet extends HttpServlet {
private static final long serialVersionUID = -5154582000538034381L;
private static final Pattern MESSAGE_KEY_PATTERN = Pattern.compile("\\$\\{([^\\}]+)\\}");
private final Logger logger = LoggerFactory.getLogger(DashboardServlet.class);
private ConfigurationAdmin configurationAdmin;
private String indexTemplate;
private String entryTemplate;
private String warnTemplate;
private String setupTemplate;
private Set<DashboardTile> tiles;
private Function<String, String> localizeFunction;
public DashboardServlet(ConfigurationAdmin configurationAdmin, String indexTemplate, String entryTemplate,
String warnTemplate, String setupTemplate, Set<DashboardTile> tiles,
Function<String, String> localizeFunction) {
this.configurationAdmin = configurationAdmin;
this.indexTemplate = indexTemplate;
this.entryTemplate = entryTemplate;
this.warnTemplate = warnTemplate;
this.setupTemplate = setupTemplate;
this.tiles = tiles;
this.localizeFunction = localizeFunction;
isExposed(null);
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
if (isSetup()) {
serveDashboard(req, resp);
} else {
serveSetup(req, resp);
}
}
private void serveDashboard(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException {
StringBuilder entries = new StringBuilder();
for (DashboardTile tile : tiles) {
Map<String, String> entryMap = new HashMap<>();
entryMap.put("name", tile.getName());
String overlay = tile.getOverlay() == null ? "none" : tile.getOverlay();
entryMap.put("url", tile.getUrl());
entryMap.put("overlay", overlay);
entryMap.put("icon", tile.getImageUrl());
entries.append(replaceKeysFromMap(entryTemplate, entryMap));
}
if (tiles.isEmpty()) {
if ("minimal".equals(getPackage())) {
entries.append("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");
entries.append("${entry.no-ui-installed}");
} else {
entries.append(
"&nbsp;&nbsp;&nbsp;&nbsp;<div class=\"spinner spinner--steps\"><img src=\"img/spinner.svg\"></div>&nbsp;&nbsp;");
entries.append("${entry.install-running}");
}
}
Map<String, String> replaceMap = new HashMap<>();
replaceMap.put("version", OpenHAB.getVersion() + " " + OpenHAB.buildString());
replaceMap.put("entries", entries.toString());
replaceMap.put("warn", isExposed(req) ? warnTemplate : "");
// Set the messages in the session
resp.setContentType("text/html;charset=UTF-8");
resp.getWriter().append(replaceKeysWithLocaleFunction(replaceKeysFromMap(indexTemplate, replaceMap)));
resp.getWriter().close();
}
private void serveSetup(HttpServletRequest req, HttpServletResponse resp) throws IOException {
if (req.getParameter("type") != null) {
setPackage(req.getParameter("type"));
resp.sendRedirect(req.getRequestURI());
} else {
Map<String, String> replaceMap = new HashMap<>();
replaceMap.put("version", OpenHAB.getVersion() + " " + OpenHAB.buildString());
resp.setContentType("text/html;charset=UTF-8");
resp.getWriter().append(replaceKeysWithLocaleFunction(replaceKeysFromMap(setupTemplate, replaceMap)));
resp.getWriter().close();
}
}
private void setPackage(String parameter) {
try {
Configuration cfg = configurationAdmin.getConfiguration(OpenHAB.ADDONS_SERVICE_PID, null);
Dictionary<String, Object> props = cfg.getProperties();
if (props == null) {
props = new Hashtable<>();
}
props.put(OpenHAB.CFG_PACKAGE, parameter);
cfg.setBundleLocation(null);
cfg.update(props);
} catch (IOException e) {
logger.error("Error while accessing the configuration admin: {}", e.getMessage());
}
}
private boolean isExposed(HttpServletRequest req) {
if (req != null) {
if ("ihavelearnedmylesson".equals(req.getParameter("warn"))) {
setExposed(false);
} else if ("activate".equals(req.getParameter("warn"))) {
setExposed(true);
}
}
try {
Configuration cfg = configurationAdmin.getConfiguration("org.openhab.dashboard");
if (cfg != null && cfg.getProperties() != null && cfg.getProperties().get("exposed") != null) {
if (cfg.getProperties().get("nowarning") == null) {
boolean value = cfg.getProperties().get("exposed").toString().equals(Boolean.TRUE.toString());
if (value) {
logger.error(
"WARNING - YOUR HOME IS EXPOSED! It is accessible from the Internet without authentication - please take immediate action!");
}
return value;
}
}
} catch (IOException e) {
logger.error("Error while accessing the configuration admin: {}", e.getMessage());
}
return false;
}
private void setExposed(boolean value) {
try {
Configuration cfg = configurationAdmin.getConfiguration("org.openhab.dashboard");
Dictionary<String, Object> props = cfg.getProperties();
if (props == null) {
props = new Hashtable<>();
}
props.put("exposed", value);
cfg.update(props);
} catch (IOException e) {
logger.error("Error while accessing the configuration admin: {}", e.getMessage());
}
}
private boolean isSetup() {
return getPackage() != null;
}
private String getPackage() {
try {
Configuration cfg = configurationAdmin.getConfiguration(OpenHAB.ADDONS_SERVICE_PID, null);
if (cfg != null && cfg.getProperties() != null && cfg.getProperties().get(OpenHAB.CFG_PACKAGE) != null) {
return cfg.getProperties().get(OpenHAB.CFG_PACKAGE).toString();
}
} catch (IOException e) {
logger.error("Error while accessing the configuration admin: {}", e.getMessage());
}
return null;
}
private String replaceKeysWithLocaleFunction(String template) {
return replaceKeysWithFunction(template, (key) -> localizeFunction.apply(key));
}
private String replaceKeysFromMap(String template, Map<String, String> map) {
return replaceKeysWithFunction(template,
(key) -> Matcher.quoteReplacement(map.getOrDefault(key, "${" + key + '}')));
}
private String replaceKeysWithFunction(String template, Function<String, String> getMessage) {
Matcher m = MESSAGE_KEY_PATTERN.matcher(template);
StringBuffer sb = new StringBuffer();
while (m.find()) {
try {
String key = m.group(1);
m.appendReplacement(sb, getMessage.apply(key));
} catch (Exception e) {
logger.debug("Error occurred during template filling, cause ", e);
}
}
m.appendTail(sb);
return sb.toString();
}
}

View File

@ -1,98 +0,0 @@
/**
* Copyright (c) 2010-2019 Contributors to the openHAB project
*
* See the NOTICE file(s) distributed with this work for additional
* information.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0
*
* SPDX-License-Identifier: EPL-2.0
*/
package org.openhab.ui.dashboard.internal;
import org.openhab.ui.dashboard.DashboardTile;
/**
* The dashboard tile for external services.
*
* @author Pauli Anttila - Initial contribution
*/
public class ExternalServiceTile implements DashboardTile {
private String name;
private String url;
private String overlay;
private String imageUrl;
private ExternalServiceTile(DashboardTileBuilder builder) {
this.name = builder.name;
this.url = builder.url;
this.overlay = builder.overlay;
this.imageUrl = builder.imageUrl;
}
@Override
public String getName() {
return name;
}
@Override
public String getUrl() {
return url;
}
@Override
public String getOverlay() {
return overlay;
}
@Override
public String getImageUrl() {
return imageUrl;
}
@Override
public String toString() {
final int MAXLEN = 100;
String limitedImageUrl = imageUrl;
if (limitedImageUrl != null && limitedImageUrl.length() > MAXLEN) {
limitedImageUrl = imageUrl.substring(0, MAXLEN) + "...";
}
return "[name=" + name + ", url=" + url + ", overlay=" + overlay + ", imageUrl=" + limitedImageUrl + "]";
}
public static class DashboardTileBuilder {
private String name;
private String url;
private String overlay;
private String imageUrl;
public DashboardTileBuilder withName(String name) {
this.name = name;
return this;
}
public DashboardTileBuilder withUrl(String url) {
this.url = url;
return this;
}
public DashboardTileBuilder withOverlay(String overlay) {
this.overlay = overlay;
return this;
}
public DashboardTileBuilder withImageUrl(String imageUrl) {
this.imageUrl = imageUrl;
return this;
}
public ExternalServiceTile build() {
return new ExternalServiceTile(this);
}
}
}

View File

@ -1,28 +0,0 @@
index.welcome = Welcome to openHAB 2
index.location-info = If you allow your browser to access your location, openHAB will use it for weather and astro information.
index.your-location = Your location:
setup.subtitle = Setup
setup.welcome = Welcome to openHAB 2 - Initial Setup
setup.intro = openHAB comes with many different add-ons. To allow an easy start, there are four pre-defined packages available that are a good starting point.
setup.check-doc = Check out the online documentation for a <a href="https://www.openhab.org/docs/configuration/packages.html" target="_blank">detailed description of those packages</a>.
setup.choose-package = Please choose a package:
setup.package-standard-overlay = Standard
setup.package-standard-footer = Recommended setup
setup.package-simple-overlay = Simple
setup.package-simple-footer = Purely UI
setup.package-expert-overlay = Expert
setup.package-expert-footer = Best for 1.x users
setup.package-demo-overlay = Demo
setup.package-demo-footer = Sample setup
setup.skip-package = Skip the package selection...
common.getting-started = Getting started? Please refer to the <a href="https://www.openhab.org/docs/" target="_blank">online documentation</a>.
entry.no-ui-installed = No user interfaces installed.
entry.install-running = Please stand by while UIs are being installed. This can take several minutes.
warn.exposed = <p><b>WARNING - YOUR HOME IS EXPOSED!</b></p> \
<p>It seems that you have configured your network in a way that you can remotely access your openHAB server. Unfortunately, it is not just you - almost <b>everybody on the Internet can access it!</b></p> \
<p>If this wasn't your plan, please act immediately. Stop the port forwarding of your router or make sure that you have a secure authentication mechanism in place, e.g. by using NGINX as a reverse proxy inbetween.</p> \
<p>If you have read and understood this message and you have taken appropriate actions, please <a href="?warn=ihavelearnedmylesson" style="color: #DDDDDD">click here</a> to make this message disappear again.</p>

View File

@ -1,27 +0,0 @@
#X-Generator: crowdin.com
index.welcome=V\u00edtejte v openHAB 2
index.location-info=Pokud povol\u00edte ve Va\u0161em prohl\u00ed\u017ee\u010di p\u0159\u00edstup k poloze, openHAB ji pou\u017eije pro astro informace a informace o po\u010das\u00ed.
index.your-location=Va\u0161e poloha\:
setup.subtitle=Konfigurace
setup.welcome=V\u00edtejte v openHAB 2 - Po\u010d\u00e1te\u010dn\u00ed konfigurace
setup.intro=openHAB p\u0159ich\u00e1z\u00ed s mnoha r\u016fzn\u00fdmi dopl\u0148ky. Pro snadn\u00fd za\u010d\u00e1tek jsou p\u0159ipraven\u00e9 \u010dty\u0159i bal\u00ed\u010dky, kter\u00e9 budou dobr\u00fdm startovn\u00edm bodem.
setup.check-doc=Pod\u00edvejte se na online dokumentaci na <a href\="https\://www.openhab.org/docs/configuration/packages.html" target\="_blank">podrobn\u00fd popis t\u011bchto bal\u00ed\u010dk\u016f</a>.
setup.choose-package=Pros\u00edm, vyberte bal\u00ed\u010dek\:
setup.package-standard-overlay=Standard
setup.package-standard-footer=Doporu\u010den\u00e1 varianta
setup.package-simple-overlay=Z\u00e1kladn\u00ed
setup.package-simple-footer=Jen u\u017eiv. prost\u0159.
setup.package-expert-overlay=Pro experty
setup.package-expert-footer=Pro u\u017eiv. verze 1.x
setup.package-demo-overlay=Demo
setup.package-demo-footer=Uk\u00e1zkov\u00e1 instalace
setup.skip-package=P\u0159esko\u010dit v\u00fdb\u011br bal\u00ed\u010dku...
common.getting-started=Za\u010d\u00edn\u00e1te? Pod\u00edvejte se na <a href\="https\://www.openhab.org/docs/" target\="_blank">online dokumentaci</a>.
entry.no-ui-installed=\u017d\u00e1dn\u00e9 u\u017eivatelsk\u00e9 rozhran\u00ed nen\u00ed nainstalovan\u00e9.
entry.install-running=Pros\u00edm po\u010dkejte, ne\u017e se nainstaluj\u00ed u\u017eivatelsk\u00e1 rozhran\u00ed. M\u016f\u017ee to p\u00e1r minut trvat.
warn.exposed=<p><b>UPOZORN\u011aN\u00cd - V\u00c1\u0160 DOMOV JE OTEV\u0158EN INTERNETU\!</b></p> \n<p>zd\u00e1 se, \u017ee jste nakonfigurovali s\u00ed\u0165 zp\u016fsobem, \u017ee lze vzd\u00e1len\u011b p\u0159istupovat k Va\u0161emu serveru openHAB. Bohu\u017eel nejen Vy - <b>t\u00e9m\u011b\u0159 v\u0161ichni na internetu k n\u011bmu mohou m\u00edt p\u0159\u00edstup\!</b></p> \n<p>Pokud to nebyl v\u00e1\u0161 \u00famysl, jednejte okam\u017eit\u011b. Zastavte p\u0159esm\u011brov\u00e1n\u00ed port\u016f na Va\u0161em routeru a nebo se ujist\u011bte, \u017ee pou\u017e\u00edv\u00e1te bezpe\u010dn\u00fd ov\u011b\u0159ovac\u00ed mechanismus, nap\u0159\u00edklad pomoc\u00ed NGINX jako reverzn\u00ed proxy.</p> \n<p>Pokud jste si p\u0159e\u010detli a pochopili tuto zpr\u00e1vu a p\u0159ijali jste p\u0159\u00edslu\u0161n\u00e1 opat\u0159en\u00ed, <a href\="?warn\=ihavelearnedmylesson" style\="color\: \#DDDDDD">klikn\u011bte zde</a>, aby tato zpr\u00e1va zmizela.</p>

View File

@ -1,27 +0,0 @@
#X-Generator: crowdin.com
index.welcome=Willkommen bei openHAB 2
index.location-info=Wenn Sie \u00fcber Ihren Browser Zugriff auf Ihren Standort gew\u00e4hren wird openHAB diesen f\u00fcr Wetter- und Astronomische-Daten verwenden.
index.your-location=Ihr Standort\:
setup.subtitle=Einrichten
setup.welcome=Willkommen bei openHAB 2 - Erstmalige Einrichtung
setup.intro=openHAB stellt viele verschiedene Add-ons bereit. Um einen leichten Einstieg zu erm\u00f6glichen werden folgende vordefinierte Pakete als Ausgangspunkt angeboten.
setup.check-doc=Bitte besuchen Sie die Online-Dokumentation, um eine <a href\="https\://www.openhab.org/docs/configuration/packages.html" target\="_blank">detaillierte Beschreibung dieser Pakete</a> zu erhalten.
setup.choose-package=Bitte w\u00e4hlen Sie ein Paket\:
setup.package-standard-overlay=Standard
setup.package-standard-footer=Empfohlenes Paket
setup.package-simple-overlay=Simple
setup.package-simple-footer=Rein Grafisch
setup.package-expert-overlay=Experte
setup.package-expert-footer=Empfohlen f\u00fcr 1.x Benutzer
setup.package-demo-overlay=Demo
setup.package-demo-footer=Beispiel-Einrichtung
setup.skip-package=Paketauswahl \u00fcberspringen...
common.getting-started=Erste Schritte? Bitte besuchen Sie die <a href\="https\://www.openhab.org/docs/" target\="_blank">Online-Dokumentation</a>.
entry.no-ui-installed=Es sind keine Benutzeroberfl\u00e4chen installiert.
entry.install-running=Bitte warten Sie, w\u00e4hrend die Benutzeroberfl\u00e4chen eingerichtet werden. Dies kann einige Minuten dauern.
warn.exposed=<p><b>ACHTUNG - IHR SYSTEM IST OFFEN ZUG\u00c4NGLICH\!</b></p>\n<p>Es scheint, dass Sie Ihr Netzwerk so konfiguriert haben, dass Sie auf den openHAB-Server aus der Ferne zugreifen k\u00f6nnen. Leider gilt dies nicht nur f\u00fcr Sie - fast <b>jeder kann aus dem Internet darauf zugreifen\!</b></p>\n<p>Wenn dies nicht gew\u00fcnscht ist, sollten Sie sofort handeln. Entfernen Sie eingerichtete Port-Weiterleitungen Ihres Routers oder stellen Sie sicher, dass Sie ein sicheres Authentifizierungsverfahren nutzen. Sie k\u00f6nnen z.B. mit Hilfe von NGINX einen Reverse-Proxy einrichten.</p>\n<p>Nachdem Sie entsprechende Ma\u00dfnahmen ergriffen haben, <a href\="?warn\=ihavelearnedmylesson" style\="color\: \#DDDDDD">klicken Sie hier</a> um diese Meldung auszublenden.</p>

View File

@ -1,27 +0,0 @@
#X-Generator: crowdin.com
index.welcome=Bienvenue dans openHAB 2
index.location-info=Si vous autorisez votre navigateur \u00e0 acc\u00e9der \u00e0 votre position, openHAB l'utilisera par exemple pour les donn\u00e9es m\u00e9t\u00e9o locales.
index.your-location=Votre position\:
setup.subtitle=Configuration
setup.welcome=Bienvenue dans openHAB 2 - Configuration initiale
setup.intro=openHAB est fourni avec de nombreuses extensions. Pour permettre un d\u00e9marrage facile, quatre paquets d'extensions pr\u00e9-d\u00e9finis sont disponibles et constituent un bon point de d\u00e9part.
setup.check-doc=Consulter la documentation en ligne pour une <a href\="https\://www.openhab.org/docs/configuration/packages.html" target\="_blank">description d\u00e9taill\u00e9e de ces paquets</a>.
setup.choose-package=Merci de choisir un paquet\:
setup.package-standard-overlay=Standard
setup.package-standard-footer=Configuration recommand\u00e9e
setup.package-simple-overlay=Simple
setup.package-simple-footer=Purement UI
setup.package-expert-overlay=Expert
setup.package-expert-footer=Pour les utilisateurs 1.x
setup.package-demo-overlay=D\u00e9mo
setup.package-demo-footer=Configuration de d\u00e9mo
setup.skip-package=Sauter l'\u00e9tape de s\u00e9lection d'un paquet...
common.getting-started=D\u00e9marrage ? Merci de vous r\u00e9f\u00e9rer \u00e0 la <a href\="https\://www.openhab.org/docs/" target\="_blank">documentation en ligne</a>.
entry.no-ui-installed=Aucune interface utilisateur install\u00e9e.
entry.install-running=Merci de patienter pendant l'installation. Cela peut prendre plusieurs minutes.
warn.exposed=<p><b>ATTENTION - VOTRE MAISON EST EXPOS\u00c9E\!</b></p>\n<p>Il semble que vous ayez configur\u00e9 votre r\u00e9seau de mani\u00e8re \u00e0 pouvoir acc\u00e9der \u00e0 distance \u00e0 votre serveur openHAB. Malheureusement, ce n'est pas seulement vous mais pratiquement <b>tout le monde sur Internet qui peut y acc\u00e9der \!</b></p>\n<p>Si ce n'\u00e9tait pas votre objectif, veuillez agir imm\u00e9diatement. Arr\u00eatez le renvoi de port de votre routeur ou assurez-vous que vous disposez d'un m\u00e9canisme d'authentification s\u00e9curis\u00e9, par exemple en utilisant NGINX comme reverse proxy entre Internet et votre serveur openHAB.</p>\n<p>Si vous avez lu et compris ce message et que vous avez pris les mesures appropri\u00e9es, merci de <a href\="?warn\=ihavelearnedmylesson" style\="color\: \#DDDDDD">cliquez ici</a> pour faire dispara\u00eetre ce message.</p>

View File

@ -1,27 +0,0 @@
#X-Generator: crowdin.com
index.welcome=\u05d1\u05e8\u05d5\u05db\u05d9\u05dd \u05d4\u05d1\u05d0\u05d9\u05dd \u05dc openHAB 2
index.location-info=\u05d0\u05dd \u05ea\u05d0\u05e4\u05e9\u05e8 \u05dc\u05d3\u05e4\u05d3\u05e4\u05df \u05d2\u05d9\u05e9\u05d4 \u05dc\u05de\u05d9\u05e7\u05d5\u05dd \u05e9\u05dc\u05da, openHAB \u05d9\u05e9\u05ea\u05de\u05e9 \u05d1\u05de\u05d9\u05d3\u05e2 \u05d6\u05d4 \u05dc\u05e0\u05ea\u05d5\u05e0\u05d9 \u05de\u05d6\u05d2 \u05d4\u05d0\u05d5\u05d5\u05d9\u05e8 \u05d5\u05de\u05d9\u05d3\u05e2 \u05d0\u05e1\u05d8\u05e8\u05d5\u05e0\u05d5\u05de\u05d9.
index.your-location=\u05d4\u05de\u05d9\u05e7\u05d5\u05dd \u05e9\u05dc\u05da\:
setup.subtitle=\u05d4\u05ea\u05e7\u05e0\u05d4
setup.welcome=\u05d1\u05e8\u05d5\u05da \u05d4\u05d1\u05d0 \u05dc openHAB 2 - \u05d4\u05d2\u05d3\u05e8\u05d4 \u05e8\u05d0\u05e9\u05d5\u05e0\u05d9\u05ea
setup.intro=openHAB \u05de\u05d2\u05d9\u05e2 \u05e2\u05dd \u05ea\u05d5\u05e1\u05e4\u05d9\u05dd \u05e8\u05d1\u05d9\u05dd \u05d5\u05e9\u05d5\u05e0\u05d9\u05dd. \u05db\u05d3\u05d9 \u05dc\u05d0\u05e4\u05e9\u05e8 \u05d4\u05ea\u05d7\u05dc\u05d4 \u05e7\u05dc\u05d4, \u05e7\u05d9\u05d9\u05de\u05d5\u05ea \u05d0\u05e8\u05d1\u05e2 \u05d7\u05d1\u05d9\u05dc\u05d5\u05ea \u05de\u05d5\u05d2\u05d3\u05e8\u05d5\u05ea \u05de\u05e8\u05d0\u05e9 \u05d4\u05e0\u05d5\u05ea\u05e0\u05d5\u05ea \u05e0\u05e7\u05d5\u05d3\u05ea \u05d4\u05ea\u05d7\u05dc\u05d4 \u05d8\u05d5\u05d1\u05d4.
setup.check-doc=\u05d1\u05d3\u05d5\u05e7 \u05d1\u05ea\u05d9\u05e2\u05d5\u05d3 \u05d4\u05de\u05e7\u05d5\u05d5\u05df <a href\="https\://www.openhab.org/docs/configuration/packages.html" target\="_blank"> \u05ea\u05d9\u05d0\u05d5\u05e8 \u05de\u05e4\u05d5\u05e8\u05d8 \u05e9\u05dc \u05d7\u05d1\u05d9\u05dc\u05d5\u05ea \u05d0\u05dc\u05d5<a/>.
setup.choose-package=\u05d1\u05d7\u05d9\u05e8\u05ea \u05d7\u05d1\u05d9\u05dc\u05d4\:
setup.package-standard-overlay=\u05e8\u05d2\u05d9\u05dc
setup.package-standard-footer=\u05d4\u05ea\u05e7\u05e0\u05d4 \u05de\u05d5\u05de\u05dc\u05e6\u05ea
setup.package-simple-overlay=\u05e4\u05e9\u05d5\u05d8
setup.package-simple-footer=\u05de\u05de\u05e9\u05e7 \u05de\u05e9\u05ea\u05de\u05e9 \u05d1\u05dc\u05d1\u05d3
setup.package-expert-overlay=\u05de\u05d5\u05de\u05d7\u05d4 (\u05db\u05dc \u05d4\u05d0\u05e4\u05e9\u05e8\u05d5\u05d9\u05d5\u05ea)
setup.package-expert-footer=\u05d4\u05d8\u05d5\u05d1 \u05d1\u05d9\u05d5\u05ea\u05e8 \u05e2\u05d1\u05d5\u05e8 \u05de\u05e9\u05ea\u05de\u05e9\u05d9\u05dd \u05d1\u05d2\u05d9\u05e8\u05e1\u05d0\u05d5\u05ea 1
setup.package-demo-overlay=\u05d4\u05d3\u05d2\u05de\u05d4
setup.package-demo-footer=\u05d4\u05ea\u05e7\u05e0\u05d4 \u05dc\u05d3\u05d5\u05d2\u05de\u05d0
setup.skip-package=\u05d3\u05dc\u05d2 \u05e2\u05dc \u05d1\u05d7\u05d9\u05e8\u05ea \u05d7\u05d1\u05d9\u05dc\u05d4...
common.getting-started=\u05de\u05ea\u05d7\u05d9\u05dc\u05d9\u05dd? \u05e0\u05d0 \u05dc\u05e4\u05e0\u05d5\u05ea \u05dc <a href\="https\://www.openhab.org/docs/" target\="_blank"> \u05ea\u05d9\u05e2\u05d5\u05d3 \u05de\u05e7\u05d5\u05d5\u05df </a>.
entry.no-ui-installed=\u05dc\u05d0 \u05d4\u05d5\u05ea\u05e7\u05df \u05de\u05de\u05e9\u05e7 \u05de\u05e9\u05ea\u05de\u05e9.
entry.install-running=\u05d0\u05e0\u05d0 \u05d4\u05de\u05ea\u05df \u05d1\u05d6\u05de\u05df \u05e9\u05de\u05de\u05e9\u05e7\u05d9 \u05d4\u05de\u05e9\u05ea\u05de\u05e9 \u05de\u05d5\u05ea\u05e7\u05e0\u05d9\u05dd. \u05ea\u05d4\u05dc\u05d9\u05da \u05d6\u05d4 \u05e2\u05dc\u05d5\u05dc \u05dc\u05e7\u05d7\u05ea \u05de\u05e1\u05e4\u05e8 \u05d3\u05e7\u05d5\u05ea.
warn.exposed=<p><b> \u05d0\u05d6\u05d4\u05e8\u05d4 - \u05d1\u05d9\u05ea\u05da \u05d7\u05e9\u05d5\u05e3</b></p> \n<p>\u05e0\u05e8\u05d0\u05d4 \u05e9\u05d4\u05d2\u05d3\u05e8\u05ea \u05d0\u05ea \u05d4\u05e8\u05e9\u05ea \u05e9\u05dc\u05da \u05d1\u05d0\u05d5\u05e4\u05df \u05e9\u05de\u05d0\u05e4\u05e9\u05e8 \u05d2\u05d9\u05e9\u05d4 \u05de\u05e8\u05d7\u05d5\u05e7 \u05dc\u05e9\u05e8\u05ea openHAB. \u05dc\u05e6\u05e2\u05e8\u05e0\u05d5 \u05d4\u05d2\u05d9\u05e9\u05d4 \u05e0\u05d9\u05ea\u05e0\u05ea \u05dc\u05d0 \u05e8\u05e7 \u05dc\u05da - <b> \u05d4\u05d2\u05d9\u05e9\u05d4 \u05dc\u05e8\u05e9\u05ea \u05e9\u05dc\u05da \u05e0\u05e4\u05ea\u05d7\u05d4 \u05db\u05de\u05e2\u05d8 \u05dc\u05db\u05d5\u05dc\u05dd \u05d1\u05e8\u05e9\u05ea\!</b></p\n<p>\u05d0\u05dd \u05d6\u05d5 \u05dc\u05d0 \u05d4\u05d9\u05d9\u05ea\u05d4 \u05db\u05d5\u05d5\u05e0\u05ea\u05da, \u05d0\u05e0\u05d0 \u05e4\u05e2\u05dc \u05de\u05d9\u05d3. \u05d7\u05e1\u05d5\u05dd \u05d0\u05ea \u05d4\u05d2\u05d9\u05e9\u05d4 \u05d4\u05e4\u05ea\u05d5\u05d7\u05d4 \u05d1\u05e8\u05d0\u05d5\u05d8\u05e8 \u05d0\u05d5 \u05d5\u05d5\u05d3\u05d0 \u05e9\u05d9\u05e9 \u05dc\u05da \u05de\u05e0\u05d2\u05e0\u05d5\u05df \u05d0\u05d1\u05d8\u05d7\u05d4 \u05de\u05d0\u05d5\u05de\u05ea \u05d1\u05de\u05e7\u05d5\u05dd, \u05dc\u05de\u05e9\u05dc \u05e2"\u05d9 \u05e9\u05d9\u05de\u05d5\u05e9 \u05d1 NGINX \u05db reverse proxy \u05db\u05d4\u05e4\u05e8\u05d3\u05d4 \u05d1\u05d0\u05de\u05e6\u05e2.</p>\n <p>\u05d0\u05dd \u05e7\u05e8\u05d0\u05ea \u05d5\u05d4\u05d1\u05e0\u05ea \u05d0\u05ea \u05d4\u05d4\u05d5\u05d3\u05e2\u05d5\u05ea \u05d4\u05e0"\u05dc \u05d5\u05d1\u05d9\u05e6\u05e2\u05ea \u05d0\u05ea \u05d4\u05e4\u05e2\u05d5\u05dc\u05d5\u05ea \u05d4\u05de\u05d5\u05de\u05dc\u05e6\u05d5\u05ea, \u05d0\u05e0\u05d0 \u05dc\u05d7\u05e5 \u05db\u05d0\u05df <a href\="?warn\=ihavelearnedmylesson" style\="color\: \#DDDDDD"> </a> \u05db\u05d3\u05d9 \u05dc\u05d4\u05e2\u05dc\u05d9\u05dd \u05d0\u05ea \u05d4\u05d4\u05d5\u05d3\u05e2\u05d4 \u05d4\u05d6\u05d0\u05ea \u05e9\u05d5\u05d1.</p>

View File

@ -1,27 +0,0 @@
#X-Generator: crowdin.com
index.welcome=\u00dcdv\u00f6z\u00f6llek az openHAB 2-ben
index.location-info=Ha enged\u00e9lyezed a b\u00f6ng\u00e9sz\u0151dnek a helymeghat\u00e1roz\u00e1st, akkor az openHAB fel tudja haszn\u00e1lni id\u0151j\u00e1r\u00e1s \u00e9s csillag\u00e1szati c\u00e9lokra
index.your-location=Tart\u00f3zkod\u00e1si helyed\:
setup.subtitle=Be\u00e1ll\u00edt\u00e1s
setup.welcome=openHAB 2 - Els\u0151 be\u00e1ll\u00edt\u00e1s
setup.intro=openHAB sok, k\u00fcl\u00f6nf\u00e9le modullal \u00e9rkezik. N\u00e9gy el\u0151redefini\u00e1lt csomag \u00e1ll rendelkez\u00e9sedre, j\u00f3 kezd\u00e9s ezek k\u00f6z\u00fcl v\u00e1lasztani.
setup.check-doc=Online dokument\u00e1ci\u00f3 a <a href\="https\://www.openhab.org/docs/configuration/packages.html" target\="_blank">a csomagok r\u00e9szletes le\u00edr\u00e1s\u00e1hoz</a>.
setup.choose-package=V\u00e1lassz egy csomagot\:
setup.package-standard-overlay=Norm\u00e1l
setup.package-standard-footer=Aj\u00e1nlott be\u00e1ll\u00edt\u00e1s
setup.package-simple-overlay=Egyszer\u0171
setup.package-simple-footer=Egyszer\u0171 felhaszn\u00e1l\u00f3i fel\u00fclet
setup.package-expert-overlay=Halad\u00f3
setup.package-expert-footer=A legjobb 1.x felhaszn\u00e1l\u00f3knak
setup.package-demo-overlay=Dem\u00f3
setup.package-demo-footer=Minta be\u00e1ll\u00edt\u00e1s
setup.skip-package=Csomagkiv\u00e1laszt\u00e1s megtart\u00e1sa...
common.getting-started=Most kezded? K\u00e9rlek n\u00e9zd meg az <a href\="https\://www.openhab.org/docs/" target\="_blank">online dokument\u00e1ci\u00f3t</a>.
entry.no-ui-installed=Nincs felhaszn\u00e1l\u00f3i fel\u00fclet telep\u00edtve.
entry.install-running=K\u00e9rlek v\u00e1rd meg, m\u00edg a felhaszn\u00e1l\u00f3 fel\u00fclet telep\u00edt\u00e9sre ker\u00fcl. Ez n\u00e9h\u00e1ny perc...
warn.exposed=<p><b>FIGYELEM - A H\u00c1ZAD L\u00c1THAT\u00d3 AZ INTERNETEN\!</b></p> \n<p>Te \u00fagy \u00e1ll\u00edtottad be a h\u00e1l\u00f3zatodat, hogy t\u00e1volr\u00f3l el\u00e9rhet\u0151 legyen az openHAB szervered, de <b>nem csak Te l\u00e1thatod, b\u00e1rki m\u00e1s is\!</b></p> \n<p>Ha nem ez volt a c\u00e9lod, akkor azonnal cselekedj\! \u00c1ll\u00edtsd le a port-forwarding -ot a router-edben \u00e9s ellen\u0151rizd a t\u0171zfal be\u00e1ll\u00edt\u00e1saidat\!</p> \n<p>Ha ez volt a c\u00e9lod, \u00e9s ez nem hiba, akkor <a href\="?warn\=ihavelearnedmylesson" style\="color\: \#DDDDDD">kattints ide</a> \u00e9s az \u00fczenet elt\u0171nik.</p>

View File

@ -1,27 +0,0 @@
#X-Generator: crowdin.com
index.welcome=Welkom bij openHAB 2
index.location-info=Als u uw browser toegang geeft tot uw locatie, zal openHAB deze gebruiken voor weer- en astro-informatie.
index.your-location=Uw locatie\:
setup.subtitle=Set-up
setup.welcome=Welkom bij openHAB 2 - Initi\u00eble configuratie
setup.intro=openHAB komt met meerdere add-ons. Om een gemakkelijke start mogelijk te maken, zijn er vier vooraf gedefinieerde pakketten beschikbaar die een goed beginpunt zijn.
setup.check-doc=Bekijk de online documentatie voor een <a href\="https\://www.openhab.org/docs/configuration/packages.html" target\="_blank"> gedetailleerde beschrijving van die pakketten (engels)</a>.
setup.choose-package=Kies een pakket\:
setup.package-standard-overlay=Standaard
setup.package-standard-footer=Aanbevolen configuratie
setup.package-simple-overlay=Eenvoudig
setup.package-simple-footer=Enkel UI
setup.package-expert-overlay=Expert
setup.package-expert-footer=Het beste voor 1.x gebruikers
setup.package-demo-overlay=Demo
setup.package-demo-footer=Voorbeeld configuratie
setup.skip-package=Sla de pakket selectie over...
common.getting-started=Net gestart? Raadpleeg de <a href\="https\://www.openhab.org/docs/" target\="_blank"> online documentatie (engels)</a>.
entry.no-ui-installed=Geen gebruikersinterfaces ge\u00efnstalleerd.
entry.install-running=Even geduld alstublieft terwijl de UI's worden ge\u00efnstalleerd. Dit kan enkele minuten duren.
warn.exposed=<p><b>WAARSCHUWING - UW HUIS IS TOEGANKELIJK VANAF HET INTERNET\!</b></p>\n<p>Het lijkt erop dat u uw netwerk heeft geconfigureerd op een manier die het mogelijk maakt op afstand op uw openHAB server te komen. Helaas heeft niet alleen u toegang - bijna <b> iedereen op het internet heeft toegang\!</b></p>\n<p>Als dit niet uw bedoeling was, dient u meteen te handelen. Stop port forwarding van uw router naar de openHAB server of zorg ervoor dat u een beveiligingsmechanisme heeft, bijvoorbeeld door gebruik te maken van NGINX als een omgekeerde proxy.</p>\n<p>Als u dit bericht gelezen en begrepen heeft en u passende maatregelen genomen heeft, <a href\="?warn\=ihavelearnedmylesson" style\="color\: \#DDDDDD">klik hier</a> om dit bericht te laten verdwijnen.</p>

View File

@ -1,25 +0,0 @@
#X-Generator: crowdin.com
index.welcome=Witaj w openHAB 2
index.location-info=Je\u015bli zezwolisz na dost\u0119p do lokalizacji w przegl\u0105darce, openHAB u\u017cyje jej w celu pozyskania informacji o lokalnej pogodzie i porze dnia.
index.your-location=Twoja lokalizacja\:
setup.subtitle=Konfiguracja
setup.welcome=Witaj w openHAB 2 - ustawienia pocz\u0105tkowe
setup.intro=openHAB jest wyposa\u017cony w wiele r\u00f3\u017cnych dodatk\u00f3w. Aby umo\u017cliwi\u0107 \u0142atwy start, przygotowali\u015bmy cztery wst\u0119pnie zdefiniowane pakiety.
setup.choose-package=Wybierz pakiet\:
setup.package-standard-overlay=Standardowy
setup.package-standard-footer=Zalecana konfiguracja
setup.package-simple-overlay=Prosty
setup.package-simple-footer=Czysty interfejs u\u017cytkownika
setup.package-expert-overlay=Ekspert
setup.package-expert-footer=Najlepszy dla u\u017cytkownik\u00f3w 1.x
setup.package-demo-overlay=Demo
setup.package-demo-footer=Przyk\u0142adowa konfiguracja
setup.skip-package=Pomi\u0144 wyb\u00f3r pakietu...
entry.no-ui-installed=Brak zainstalowanych interfejs\u00f3w u\u017cytkownika.
entry.install-running=Poczekaj - instalujemy interfejsy u\u017cytkownika. Mo\u017ce to potrwa\u0107 kilka minut.
warn.exposed=<p><b>Ostrze\u017cenie - Tw\u00f3j dom jest NARA\u017bONY\!</b></p>\n<p>Wydaje si\u0119, \u017ce skonfigurowano sie\u0107 tak, \u017ce mo\u017cliwy jest zdalny dost\u0119p do serwera openHAB. Niestety, nie tylko dla Ciebie - prawie <b>wszyscy w Internecie mog\u0105 uzyska\u0107 do niego dost\u0119p\!</b></p>\n<p>Je\u015bli nie mia\u0142e\u015b takiego zamiaru, musisz dzia\u0142a\u0107 natychmiast. Zatrzymaj przekierowania port\u00f3w routera lub upewnij si\u0119, \u017ce masz mechanizm bezpiecznego uwierzytelniania, np. za pomoc\u0105 NGINX jako "reverse proxy".</p> <p>Je\u015bli przeczyta\u0142e\u015b i zrozumia\u0142e\u015b ten komunikat, a tak\u017ce podj\u0105\u0142e\u015b odpowiednie kroki, prosz\u0119 <a href\="?warn\=ihavelearnedmylesson" style\="color\: \#DDDDDD"> kliknij tutaj</a></p>

View File

@ -1,27 +0,0 @@
#X-Generator: crowdin.com
index.welcome=\u0414\u043e\u0431\u0440\u043e \u043f\u043e\u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c \u0432 openHAB 2
index.location-info=\u0415\u0441\u043b\u0438 \u0432\u044b \u0440\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u0435 \u0432\u0430\u0448\u0435\u043c\u0443 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0443 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0432\u0430\u0448\u0435\u043c\u0443 \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044e, openHAB \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0434\u043b\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u043f\u043e\u0433\u043e\u0434\u0435 \u0438 \u0430\u0441\u0442\u0440\u043e\u043d\u043e\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445.
index.your-location=\u0412\u0430\u0448\u0435 \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435\:
setup.subtitle=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438
setup.welcome=\u0414\u043e\u0431\u0440\u043e \u043f\u043e\u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c \u0432 openHAB 2 - \u041d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438
setup.intro=\u0421 openHAB \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0439. \u0414\u043b\u044f \u0431\u043e\u043b\u0435\u0435 \u043b\u0435\u0433\u043a\u043e\u0433\u043e \u0441\u0442\u0430\u0440\u0442\u0430, \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0447\u0435\u0442\u044b\u0440\u0435 \u043f\u0440\u0435\u0434\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u043f\u0430\u043a\u0435\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0445\u043e\u0440\u043e\u0448\u0435\u0439 \u043e\u0442\u043f\u0440\u0430\u0432\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u043e\u0439.
setup.check-doc=\u041e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u0441 \u043e\u043d\u043b\u0430\u0439\u043d \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0435\u0439 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f <a href\="https\://www.openhab.org/docs/configuration/packages.html" target\="_blank"> \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0433\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u044d\u0442\u0438\u0445 \u043f\u0430\u043a\u0435\u0442\u043e\u0432</a>.
setup.choose-package=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043f\u0430\u043a\u0435\u0442\:
setup.package-standard-overlay=\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439
setup.package-standard-footer=\u0420\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u043c\u044b\u0439
setup.package-simple-overlay=\u041f\u0440\u043e\u0441\u0442\u043e\u0439
setup.package-simple-footer=\u0422\u043e\u043b\u044c\u043a\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441
setup.package-expert-overlay=\u042d\u043a\u0441\u043f\u0435\u0440\u0442
setup.package-expert-footer=\u0414\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 v1.x
setup.package-demo-overlay=\u0414\u0435\u043c\u043e
setup.package-demo-footer=\u041f\u0440\u0438\u043c\u0435\u0440\u044b \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438
setup.skip-package=\u041f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0432\u044b\u0431\u043e\u0440 \u043f\u0430\u043a\u0435\u0442\u043e\u0432...
common.getting-started=\u041d\u0430\u0447\u0438\u043d\u0430\u0435\u043c? \u0422\u043e\u0433\u0434\u0430 \u043a <a href\="https\://www.openhab.org/docs/" target\="_blank"> \u043e\u043d\u043b\u0430\u0439\u043d \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438</a>.
entry.no-ui-installed=\u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u044b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043d\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u044b.
entry.install-running=\u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0435 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u044b. \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u043e\u0434\u043e\u0436\u0434\u0438\u0442\u0435. \u042d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043d\u044f\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u0438\u043d\u0443\u0442.
warn.exposed=<p><b>\u041f\u0420\u0415\u0414\u0423\u041f\u0420\u0415\u0416\u0414\u0415\u041d\u0418\u0415 - \u0412\u0410\u0428 \u0414\u041e\u041c \u041f\u041e\u0414\u0412\u0415\u0420\u0413\u0410\u0415\u0422\u0421\u042f \u041e\u041f\u0410\u0421\u041d\u041e\u0421\u0422\u0418\!</b></p> \n<p>\u041a\u0430\u0436\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0432\u044b \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u043b\u0438 \u0441\u0432\u043e\u044e \u0441\u0435\u0442\u044c \u0442\u0430\u043a, \u0447\u0442\u043e \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0432\u0430\u0448\u0435\u043c\u0443 \u0441\u0435\u0440\u0432\u0435\u0440\u0443 openHAB. \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u044d\u0442\u043e \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u044b - \u043f\u043e\u0447\u0442\u0438 <b>\u043b\u044e\u0431\u043e\u0439 \u0432 \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0435 \u0441\u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043a \u043d\u0435\u043c\u0443 \u0434\u043e\u0441\u0442\u0443\u043f\!</b></p> \n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u044d\u0442\u043e \u043d\u0435 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043b\u0438, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0439\u0442\u0435 \u043d\u0435\u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e. \u041e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0435 \u043f\u0435\u0440\u0435\u0430\u0434\u0440\u0435\u0441\u0430\u0446\u0438\u044e \u043f\u043e\u0440\u0442\u043e\u0432 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0442\u043e\u0440\u0430 \u0438\u043b\u0438 \u0443\u0431\u0435\u0434\u0438\u0442\u0435\u0441\u044c, \u0447\u0442\u043e \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u0441\u043f\u043e\u0441\u043e\u0431 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0439 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 NGINX \u043a\u0430\u043a \u043e\u0431\u0440\u0430\u0442\u043d\u044b\u0439 \u043f\u0440\u043e\u043a\u0441\u0438 \u043c\u0435\u0436\u0434\u0443 \u043d\u0438\u043c\u0438.</p> \n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043b\u0438 \u0438 \u043f\u043e\u043d\u044f\u043b\u0438 \u044d\u0442\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0438 \u0432\u044b \u043f\u0440\u0435\u0434\u043f\u0440\u0438\u043d\u044f\u043b\u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430 <a href\="?warn\=ihavelearnedmylesson" style\="color\: \#DDDDDD">\u043d\u0430\u0436\u043c\u0438\u0442\u0435 \u0437\u0434\u0435\u0441\u044c</a> \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u043a\u0440\u044b\u0442\u044c \u044d\u0442\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435</p>

View File

@ -1,25 +0,0 @@
#X-Generator: crowdin.com
index.welcome=Maligayang pagdating sa openHAB 2
index.location-info=Kung papayagan mo na ang iyong browser ay makaakses sa iyong lokasyon, Ito ay maaaring magamit ng openHAB para sa impormasyon ng panahon at ng astro.
index.your-location=Ang iyong lokasyon\:
setup.subtitle=Magsetup
setup.welcome=Maligayang pagdating sa openHAB2- Pangunahing Pagsetup
setup.intro=ang openHAB ay mayroong iba't ibang add-ons. Upang pahintulutan ang madaliang pagsisimula, mayroong apat na pre-defined packages na magagamit bilang isang magandang panimula.
setup.choose-package=Pakiusap pumili ng package\:
setup.package-standard-overlay=Pamantayan
setup.package-standard-footer=Inirekokomendang pagsesetup
setup.package-simple-overlay=Simple
setup.package-simple-footer=Lubos na UI
setup.package-expert-overlay=Dalubhasa
setup.package-expert-footer=Pinakamabuti pra sa 1.x na mga tagagamit
setup.package-demo-overlay=Demo
setup.package-demo-footer=Halimbawa ng pagsetup
setup.skip-package=Laktawan ang seleksyon ng package...
entry.no-ui-installed=Walang nakalagay na mga interfaces ng tagagamit.
entry.install-running=Pakiusap manatili lang habang ang UIs ay inilalagay, Ito ay aabot ng ilang minuto.
warn.exposed=<p><b>BABALA - ANG BAHAY MO AY NAKALANTAD\!</b></p><p>Muka yatang naisa ayos mo ang iyong network sa paraan na bahagya mong maaakses ang iyong openHAB server. Sa kasamaang palad, hindi lang ikaw - halos<b>lahat ng nasa internet ay makakaakses nito.</b></p><p>Kung hindi ito ang plano mo, pakiusap umaksyon ka agad. Ihinto ang port forwarding ng iyong router o kaya siguradurin mong na mayroon kang ligtas na pagpapatunay na mekanismo na nakalagay, e.g. sa paggamit ng NGINX bilang kabaliktaran na proxy sa gitna.</p><p>Kung nabasa mo na at naunawaan ang mensaheng ito at gumawa ng na aangkop na hakbang, pakiusap<a href\="?warn\=ihavelearnedmylesson" style\="color\: \#DDDDDD">pindutin ito</a>upang mawala ang mensahe ulit.</p>

View File

@ -1,27 +0,0 @@
#X-Generator: crowdin.com
index.welcome=openHAB 2 uygulamas\u0131na ho\u015fgeldiniz
index.location-info=Taray\u0131c\u0131n\u0131z\u0131n konumunuza eri\u015fmesine izin verirseniz openHAB bu bilgiyi hava ve g\u00f6kbilim verileri i\u00e7in kullan\u0131r.
index.your-location=Konumunuz\:
setup.subtitle=Kurulum
setup.welcome=openHAB 2\u2019ye ho\u015fgeldiniz - ba\u015flang\u0131\u00e7 kurulumu
setup.intro=openHAB bir\u00e7ok farkl\u0131 eklenti ile gelir. Kolay bir ba\u015flang\u0131\u00e7 i\u00e7in d\u00f6rt adet \u00f6nceden tan\u0131mlanm\u0131\u015f paketleri vard\u0131r. Bu paketler iyi bir se\u00e7enektir.
setup.check-doc=Bu paketlerin <a href\="http\://docs.openhab.org/configuration/packages.html" target\="_blank">ayr\u0131nt\u0131l\u0131 a\u00e7\u0131klamalar\u0131</a> i\u00e7in \u00e7evrimi\u00e7i belgelere g\u00f6z at\u0131n.
setup.choose-package=L\u00fctfen bir paket se\u00e7iniz\:
setup.package-standard-overlay=Standart
setup.package-standard-footer=\u00d6nerilen kurulum
setup.package-simple-overlay=Basit
setup.package-simple-footer=S\u0131rf kullan\u0131c\u0131 aray\u00fcz\u00fc
setup.package-expert-overlay=Uzman
setup.package-expert-footer=1.x kullan\u0131c\u0131lar\u0131 i\u00e7in en iyi se\u00e7enek
setup.package-demo-overlay=\u00d6rnek
setup.package-demo-footer=\u00d6rnek kurulum
setup.skip-package=Paket se\u00e7imini atla...
common.getting-started=Yenimi ba\u015fl\u0131yorsunuz? L\u00fctfen <a href\="http\://docs.openhab.org/" target\="_blank">\u00e7evrimi\u00e7i belgelere</a> g\u00f6z at\u0131n\u0131z.
entry.no-ui-installed=Hi\u00e7bir kullan\u0131c\u0131 aray\u00fcz\u00fc y\u00fckl\u00fc de\u011fil.
entry.install-running=Aray\u00fczler y\u00fckleniyor, l\u00fctfen biraz bekleyin. Bu i\u015flem birka\u00e7 dakika s\u00fcrebilir.
warn.exposed=<p><b>Uyar\u0131 - eviniz riske maruz\!</b></p> <p>A\u011f\u0131n\u0131z openHAB sunucunuza uzaktan eri\u015febilece\u011finiz bir \u015fekilde yap\u0131land\u0131r\u0131lm\u0131\u015f gibi g\u00f6r\u00fcn\u00fcyor. Ne yaz\u0131k ki, sunucunuza s\u0131rf siz de\u011fil, neredeyse <b>internetteki her ki\u015fi eri\u015febilir\!</b></p>Bunu bilin\u00e7li olarak se\u00e7mediyseniz hemen harekete ge\u00e7in. Port y\u00f6nlendirmesini durdurun veya g\u00fcvenli kimlik do\u011frulama mekanizmas\u0131 kurun. \u00d6rne\u011fin NGINX ile bir ters proxy kulland\u0131\u011f\u0131n\u0131za emin olun.</p> <p>Bu iletiyi okuyup, anlay\u0131p gerekli \u00f6nlemleri ald\u0131ysan\u0131z, bu iletiyi bir daha g\u00f6stermemek i\u00e7in l\u00fctfen <a href\="?warn\=ihavelearnedmylesson" style\="color\: \#DDDDDD">buraya t\u0131klay\u0131n</a>.</p>

View File

@ -1,10 +0,0 @@
<div class="link-wrapper col-md-3 col-sm-6 col-xs-6">
<a class="link" style="text-decoration: none;" href="${url}">
<div class="body" style="background-image: url('${icon}')">
<div class="overlay icon-${overlay}"></div>
</div>
<div class="footer">
<p>${name}</p>
</div>
</a>
</div>

View File

@ -1,63 +0,0 @@
<!DOCTYPE html>
<html lang="${locale}">
<head>
<meta charset="utf-8" />
<meta http-equiv="refresh" content="10">
<meta name="viewport"
content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<title>openHAB</title>
<link type="text/css" href="fonts/icomoon.css" rel="stylesheet" media="all">
<link type="text/css" href="css/bootstrap.min.css" rel="stylesheet"></link>
<link type="text/css" href="css/main.css" rel="stylesheet"></link>
<link rel="icon" href="favicon.ico" type="image/vnd.microsoft.icon"><link>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/geolocation.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$('a.link').each(function(index) {
var href = $(this)
.attr('href')
.replace(/{HOST}/g, window.location.host)
.replace(/{HOSTNAME}/g, window.location.hostname);
$(this).attr('href', href);
});
});
</script>
</head>
<body>
<header>
<div class="container">
<img src="img/openhab-logo.png" />
</div>
</header>
<section class="container">
<h1>${index.welcome}</h1>
<div class="line">
<div class="decorator"></div>
<hr />
</div>
${warn}
<div class="links row">
${entries}
</div>
<div class="line">
<div class="geolocation">
<div class="decorator"></div>
<hr />
<p>${index.location-info}</p>
<p><span>${index.your-location} </span><span id="geolocation"></span></p>
</div>
<div class="decorator"></div>
<hr />
</div>
${common.getting-started}
</section>
<footer>
<p>openHAB ${version}</p>
</footer>
</body>
</html>

View File

@ -1,93 +0,0 @@
<!DOCTYPE html>
<html lang="${locale}">
<head>
<meta charset="utf-8" />
<meta name="viewport"
content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<title>openHAB - ${setup.subtitle}</title>
<link type="text/css" href="fonts/icomoon.css" rel="stylesheet" media="all">
<link type="text/css" href="css/bootstrap.min.css" rel="stylesheet"></link>
<link type="text/css" href="css/main.css" rel="stylesheet"></link>
<link rel="icon" href="favicon.ico" type="image/vnd.microsoft.icon"><link>
</head>
<body>
<header>
<div class="container">
<img src="img/openhab-logo.png" />
</div>
</header>
<section class="container">
<h1>${setup.welcome}</h1>
<div class="line">
<div class="decorator"></div>
<div>
<p><br/>${setup.intro}
<br/>${setup.check-doc}</p>
<hr />
<p><b>${setup.choose-package}</b></p>
</div>
</div>
<div class="links row">
<div class="link-wrapper col-md-3 col-sm-6 col-xs-6">
<div class="link" onclick="location.href = 'index?type=simple'">
<div class="body" style="background-image: url('img/simple.jpg')">
<div class="overlay">
${setup.package-simple-overlay}
</div>
</div>
<div class="footer">
<p>${setup.package-simple-footer}</p>
</div>
</div>
</div>
<div class="link-wrapper col-md-3 col-sm-6 col-xs-6">
<div class="link" onclick="location.href = 'index?type=standard'">
<div class="body" style="background-image: url('img/standard.jpg')">
<div class="overlay">
${setup.package-standard-overlay}
</div>
</div>
<div class="footer">
<p>${setup.package-standard-footer}</p>
</div>
</div>
</div>
<div class="link-wrapper col-md-3 col-sm-6 col-xs-6">
<div class="link" onclick="location.href = 'index?type=expert'">
<div class="body" style="background-image: url('img/expert.jpg')">
<div class="overlay">
${setup.package-expert-overlay}
</div>
</div>
<div class="footer">
<p>${setup.package-expert-footer}</p>
</div>
</div>
</div>
<div class="link-wrapper col-md-3 col-sm-6 col-xs-6">
<div class="link" onclick="location.href = 'index?type=demo'">
<div class="body" style="background-image: url('img/demo.jpg')">
<div class="overlay">
${setup.package-demo-overlay}
</div>
</div>
<div class="footer">
<p>${setup.package-demo-footer}</p>
</div>
</div>
</div>
</div>
<a href="#" onclick="location.href = 'index?type=minimal'">${setup.skip-package}</a>.
<div class="line">
<div class="decorator"></div>
<hr />
</div>
${common.getting-started}
</section>
<footer>
<p>openHAB ${version}</p>
</footer>
</body>
</html>

View File

@ -1,13 +0,0 @@
<div class="links row">
<div class="link-wrapper col-md-12 col-sm-12 col-xs-12">
<div class="body" style="background-color: #FF0000; padding: 20px">
<div class="overlay" style="font-size: 150%; color: #FFFFFF">
${warn.exposed}
</div>
</div>
</div>
</div>
<div class="line">
<div class="decorator"></div>
<hr />
</div>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,112 +0,0 @@
body {
background-color: #F9F9F9;
}
body, h1, h2, h3 {
font-family: "Roboto", Helvetica, Arial, sans-serif;
font-weight: 300;
}
.container {
}
.line {
position: relative;
}
.line .decorator {
position: absolute;
left: 0px;
width: 50px;
border-top: 1px solid #F60;
}
header {
background: #F60;
height: 80px;
line-height: 80px;
text-align: center;
position: fixed;
top: 0;
width: 100%;
box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.15);
z-index: 1;
}
header .container {
position: relative;
padding: 0 20px;
}
header img {
position: absolute;
left: 10px;
top: 15px;
}
@media (max-width: 768px) {
header h3 {
display: none;
}
}
section {
margin-top: 90px;
margin-bottom: 70px;
}
a.link {
display: block;
}
.link {
box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.15);
margin-bottom: 20px;
text-align: center;
cursor: pointer;
}
.link .body {
position:relative;
height: 150px;
background-color: white;
background-size: cover;
background-repeat: no-repeat;
}
.link .body .overlay {
position: relative;
top: 0px;
width: 100%;
height: 100%;
background: linear-gradient(to bottom, rgba(0,0,0,0.65) 0%,rgba(0,0,0,0) 100%);
opacity: 1;
font-size: 50px;
color: white;
line-height: 150px;
}
.link .body .overlay:hover {
background: linear-gradient(135deg, rgba(255,102,0,1) 0%,rgba(255,102,0,0.5) 50%,rgba(30,87,153,0) 100%);
}
.link .footer {
height: 50px;
background-color: #F60;
color: white;
line-height: 50px;
text-transform: uppercase;
}
footer {
background: #333;
color: #fff;
height: 50px;
line-height: 50px;
text-align: center;
position: fixed;
bottom: 0;
width: 100%;
box-shadow: 0 -2px 4px 0 rgba(0, 0, 0, 0.15);
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

View File

@ -1,55 +0,0 @@
@font-face {
font-family: 'icomoon';
src:url('icomoon.eot?-sxozs7');
src:url('icomoon.eot?#iefix-sxozs7') format('embedded-opentype'),
url('icomoon.woff?-sxozs7') format('woff'),
url('icomoon.ttf?-sxozs7') format('truetype'),
url('icomoon.svg?-sxozs7#icomoon') format('svg');
font-weight: normal;
font-style: normal;
}
[class^="icon-"], [class*=" icon-"] {
font-family: 'icomoon';
speak: none;
font-style: normal;
font-weight: normal;
font-variant: normal;
text-transform: none;
line-height: 1;
/* Better Font Rendering =========== */
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.icon-apple:before {
content: "\e796";
}
.icon-android:before {
content: "\e798";
}
.icon-html5:before {
content: "\e7ba";
}
@keyframes anim-rotate {
0% {
transform: rotate(0);
}
100% {
transform: rotate(360deg);
}
}
.spinner {
display: inline-block;
line-height: 1;
animation: anim-rotate 2s infinite linear;
color: #333;
text-shadow: 0 0 .25em rgba(255,255,255, .3);
}
.spinner--steps {
animation: anim-rotate 1s infinite steps(12);
}

View File

@ -1,13 +0,0 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
<svg xmlns="http://www.w3.org/2000/svg">
<metadata>Generated by IcoMoon</metadata>
<defs>
<font id="icomoon" horiz-adv-x="512">
<font-face units-per-em="512" ascent="480" descent="-32" />
<missing-glyph horiz-adv-x="512" />
<glyph unicode="&#x20;" d="" horiz-adv-x="256" />
<glyph unicode="&#xe796;" d="M395.749 207.954c-0.647 64.841 52.879 95.938 55.271 97.483-30.076 44.010-76.925 50.039-93.621 50.736-39.871 4.037-77.798-23.474-98.033-23.474-20.184 0-51.409 22.877-84.476 22.276-43.458-0.646-83.529-25.269-105.906-64.19-45.152-78.349-11.563-194.42 32.445-257.963 21.504-31.102 47.146-66.038 80.813-64.79 32.421 1.294 44.681 20.979 83.878 20.979s50.214-20.979 84.525-20.335c34.887 0.648 56.991 31.699 78.346 62.898 24.695 36.084 34.863 71.019 35.462 72.813-0.774 0.353-68.030 26.118-68.704 103.567zM331.281 398.239c17.869 21.679 29.93 51.756 26.64 81.761-25.739-1.048-56.939-17.145-75.405-38.775-16.571-19.188-31.074-49.813-27.187-79.218 28.733-2.242 58.064 14.602 75.952 36.232z" />
<glyph unicode="&#xe798;" d="M432 320c-17.6 0-32-14.4-32-32v-128c0-17.6 14.4-32 32-32s32 14.4 32 32v128c0 17.6-14.4 32-32 32zM48 320c-17.6 0-32-14.4-32-32v-128c0-17.6 14.4-32 32-32s32 14.4 32 32v128c0 17.6-14.401 32-32 32zM96 112c0-26.51 21.49-48 48-48h16v-64c0-17.6 14.4-32 32-32s32 14.4 32 32v64h32v-64c0-17.6 14.401-32 32-32s32 14.4 32 32v64h16c26.51 0 48 21.49 48 48v176h-288v-176zM299.299 435.253l20.252 38.903c1.016 1.951 0.25 4.379-1.701 5.395s-4.379 0.25-5.395-1.701l-20.559-39.493c-16.099 6.224-33.597 9.643-51.896 9.643-18.298 0-35.796-3.419-51.898-9.643l-20.558 39.492c-1.016 1.951-3.443 2.717-5.395 1.701s-2.717-3.443-1.701-5.395l20.25-38.904c-45.315-20.509-78.12-63.792-83.81-115.252h286.22c-5.688 51.462-38.493 94.744-83.809 115.254zM176 344.8c-12.813 0-23.2 10.387-23.2 23.2s10.387 23.2 23.2 23.2 23.2-10.387 23.2-23.2c-0.001-12.813-10.387-23.2-23.2-23.2zM304 344.8c-12.813 0-23.201 10.387-23.201 23.2s10.389 23.2 23.201 23.2 23.199-10.387 23.199-23.2c0-12.813-10.386-23.2-23.199-23.2z" />
<glyph unicode="&#xe7ba;" d="M30.269 480l41.072-460.815 184.378-51.185 184.862 51.262 41.15 460.738h-451.462zM392.315 329.286h-216.27l5.151-57.875h205.984l-15.521-173.505-115.922-32.127-115.786 32.127-7.915 88.756h56.747l4.024-45.116 62.931-16.958 0.139 0.039 62.967 16.996 6.535 73.275h-195.87l-15.247 170.9h283.107l-5.054-56.512z" />
</font></defs></svg>

Before

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 93 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

View File

@ -1,17 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generated by IcoMoon.io -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16">
<path fill="#000000" d="M8 4.736c-0.515 0-0.933-0.418-0.933-0.933v-2.798c0-0.515 0.418-0.933 0.933-0.933s0.933 0.418 0.933 0.933v2.798c0 0.515-0.418 0.933-0.933 0.933z"></path>
<path fill="#000000" d="M8 15.577c-0.322 0-0.583-0.261-0.583-0.583v-2.798c0-0.322 0.261-0.583 0.583-0.583s0.583 0.261 0.583 0.583v2.798c0 0.322-0.261 0.583-0.583 0.583z"></path>
<path fill="#000000" d="M5.902 5.24c-0.302 0-0.596-0.157-0.758-0.437l-1.399-2.423c-0.241-0.418-0.098-0.953 0.32-1.194s0.953-0.098 1.194 0.32l1.399 2.423c0.241 0.418 0.098 0.953-0.32 1.194-0.138 0.079-0.288 0.117-0.436 0.117z"></path>
<path fill="#000000" d="M11.498 14.582c-0.181 0-0.358-0.094-0.455-0.262l-1.399-2.423c-0.145-0.251-0.059-0.572 0.192-0.717s0.572-0.059 0.717 0.192l1.399 2.423c0.145 0.251 0.059 0.572-0.192 0.717-0.083 0.048-0.173 0.070-0.262 0.070z"></path>
<path fill="#000000" d="M4.365 6.718c-0.138 0-0.279-0.035-0.407-0.109l-2.423-1.399c-0.39-0.225-0.524-0.724-0.299-1.115s0.724-0.524 1.115-0.299l2.423 1.399c0.39 0.225 0.524 0.724 0.299 1.115-0.151 0.262-0.425 0.408-0.707 0.408z"></path>
<path fill="#000000" d="M14.057 11.964c-0.079 0-0.159-0.020-0.233-0.063l-2.423-1.399c-0.223-0.129-0.299-0.414-0.171-0.637s0.414-0.299 0.637-0.171l2.423 1.399c0.223 0.129 0.299 0.414 0.171 0.637-0.086 0.15-0.243 0.233-0.404 0.233z"></path>
<path fill="#000000" d="M3.803 8.758h-2.798c-0.418 0-0.758-0.339-0.758-0.758s0.339-0.758 0.758-0.758h2.798c0.419 0 0.758 0.339 0.758 0.758s-0.339 0.758-0.758 0.758z"></path>
<path fill="#000000" d="M14.995 8.466c-0 0 0 0 0 0h-2.798c-0.258-0-0.466-0.209-0.466-0.466s0.209-0.466 0.466-0.466c0 0 0 0 0 0h2.798c0.258 0 0.466 0.209 0.466 0.466s-0.209 0.466-0.466 0.466z"></path>
<path fill="#000000" d="M1.943 12.197c-0.242 0-0.477-0.125-0.606-0.35-0.193-0.335-0.079-0.762 0.256-0.955l2.423-1.399c0.335-0.193 0.762-0.079 0.955 0.256s0.079 0.762-0.256 0.955l-2.423 1.399c-0.11 0.064-0.23 0.094-0.349 0.094z"></path>
<path fill="#000000" d="M11.635 6.368c-0.161 0-0.318-0.084-0.404-0.233-0.129-0.223-0.052-0.508 0.171-0.637l2.423-1.399c0.223-0.129 0.508-0.052 0.637 0.171s0.052 0.508-0.171 0.637l-2.423 1.399c-0.073 0.042-0.154 0.063-0.233 0.063z"></path>
<path fill="#000000" d="M4.502 14.699c-0.109 0-0.219-0.028-0.32-0.086-0.307-0.177-0.412-0.569-0.235-0.876l1.399-2.423c0.177-0.307 0.569-0.412 0.876-0.235s0.412 0.569 0.235 0.876l-1.399 2.423c-0.119 0.206-0.334 0.321-0.556 0.321z"></path>
<path fill="#000000" d="M10.098 4.832c-0.079 0-0.159-0.020-0.233-0.063-0.223-0.129-0.299-0.414-0.171-0.637l1.399-2.423c0.129-0.223 0.414-0.299 0.637-0.171s0.299 0.414 0.171 0.637l-1.399 2.423c-0.086 0.15-0.243 0.233-0.404 0.233z"></path>
</svg>

Before

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

View File

@ -1,51 +0,0 @@
(function(window, $) {
$(function() {
function success(position) {
var latitude = position.coords.latitude
var longitude = position.coords.longitude
output.html(latitude + '°N, ' + longitude + '°E')
send({
location : latitude + ',' + longitude
});
}
function error() {
$('.geolocation').hide()
}
$('.geolocation').hide()
if (!navigator.geolocation || !navigator.geolocation.getCurrentPosition) {
return
}
var output = $('#geolocation')
$.getJSON(window.location.origin + '/rest/services/org.eclipse.smarthome.core.i18nprovider/config', function(response) {
window.language = response;
if (!response.location) {
$('.geolocation').show()
output.html("<div class=\"spinner spinner--steps\"><img src=\"img/spinner.svg\"></div>")
navigator.geolocation.getCurrentPosition(success, error)
}
})
})
function send(configuration) {
$.ajax({
url : window.location.origin + '/rest/services/org.eclipse.smarthome.core.i18nprovider/config',
data : JSON.stringify(configuration),
type : 'PUT',
dataType : 'json',
contentType : 'application/json'
}).done(function(response) {
console.log('configuration send: ' + response);
}).fail(function(xhr, status, errorThrown) {
console.log('Request failed. Returned status of ' + status)
})
}
})(window, $)

File diff suppressed because one or more lines are too long

View File

@ -102,7 +102,6 @@
<module>org.openhab.core.test.magic</module> <module>org.openhab.core.test.magic</module>
<module>org.openhab.core.ui</module> <module>org.openhab.core.ui</module>
<module>org.openhab.core.ui.icon</module> <module>org.openhab.core.ui.icon</module>
<module>org.openhab.core.ui.dashboard</module>
</modules> </modules>
<profiles> <profiles>

View File

@ -543,7 +543,6 @@
<bundle start-level="30">mvn:org.openhab.core.bundles/org.openhab.ui.start/${project.version}</bundle> --> <bundle start-level="30">mvn:org.openhab.core.bundles/org.openhab.ui.start/${project.version}</bundle> -->
<bundle start-level="90">mvn:org.openhab.core.bundles/org.openhab.core.boot/${project.version}</bundle> <bundle start-level="90">mvn:org.openhab.core.bundles/org.openhab.core.boot/${project.version}</bundle>
<bundle>mvn:org.openhab.core.bundles/org.openhab.core.karaf/${project.version}</bundle> <bundle>mvn:org.openhab.core.bundles/org.openhab.core.karaf/${project.version}</bundle>
<bundle>mvn:org.openhab.core.bundles/org.openhab.core.ui.dashboard/${project.version}</bundle>
<config name="org.eclipse.smarthome.audio"> <config name="org.eclipse.smarthome.audio">
defaultSink = enhancedjavasound defaultSink = enhancedjavasound
</config> </config>

View File

@ -436,11 +436,6 @@
<transitive>false</transitive> <transitive>false</transitive>
<source>true</source> <source>true</source>
</artifact> </artifact>
<artifact>
<id>org.openhab.core.bundles:org.openhab.core.ui.dashboard:${project.version}</id>
<transitive>false</transitive>
<source>true</source>
</artifact>
<artifact> <artifact>
<id>org.openhab.core.bundles:org.openhab.core.ui.icon:${project.version}</id> <id>org.openhab.core.bundles:org.openhab.core.ui.icon:${project.version}</id>
<transitive>false</transitive> <transitive>false</transitive>